Javascript работает с кодом ASP.NET позади - PullRequest
2 голосов
/ 06 мая 2009

Мне нужно сделать кнопку удаления для простого интранет-форума. Я хотел бы иметь окно предупреждения javascript (или эквивалентное), запрашивающее подтверждение при удалении сообщений. Тем не менее, мне было трудно получить результат окна подтверждения javascript для подачи в код. Это вообще возможно? Или я должен использовать другой вид дизайна?

Ответы [ 9 ]

6 голосов
/ 06 мая 2009

Вы бы просто запретили обратный вызов, если пользователь нажал "Отмена"

.

Редактировать: как указал Джош Стодола


<asp:Button runat="server" ID="Save" 
    OnClientClick="if (!confirm('Are you sure?')) return false;" />
1 голос
/ 06 мая 2009

Вы хотите сделать что-то вроде:

    <asp:button runat="server" id="mybutton" 
OnClientClick="return confirm('delete?');" />
0 голосов
/ 06 мая 2009

Я бы порекомендовал для этого подклассы стандартного кнопочного элемента управления, чтобы вы могли снова использовать код в будущем.

namespace MyApp.Controls
{
    public class PromptButton
    {
        public string Prompt { get; set; }

        protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender(e);

            if (!string.IsNullOrEmpty(Prompt))
            {
                // Escape apostrophe's in the prompt message
                string safePrompt = Prompt.Replace("'", "\'");

                // Add the onClick to show the alert box when clicked
                Attributes.Add("onClick", string.Format("return confirm('{0}')", safePrompt));
            }
        }
    }
}

Как только вы это сделаете, вы можете добавить ссылку вверху страницы ASPX или в web.config:

<%@ Register Assembly="MyAssembly" Namespace="MyApp.Controls" TagPrefix="app" %>

На своей странице вы должны использовать следующее:

<app:PromptButton ID="PromptButton1" Prompt="Are you sure?" OnClick="PromptButton1_Click" runat="server" />

Это приведет к отображению диалогового окна подтверждения Javascript, и если пользователь нажмет «ОК», произойдет обратная передача. Если пользователь нажмет кнопку «Отмена», ничего не произойдет.

Это немного больше работы с самого начала, но код гораздо более пригоден для повторного использования, и даже может быть перемещен в отдельную библиотеку и использоваться в нескольких проектах.

0 голосов
/ 06 мая 2009

Если у вас есть ASP.NET AJAX, используйте ConfirmButtonExtender .

Вы подключаете код для кнопки удаления как обычно. Затем вы прикрепляете расширитель подтверждения к нему. Он автоматически вставит соответствующий JavaScript, чтобы дать вам модальное подтверждение (с блингом, а не стилем предупреждения браузера), и будет либо работать как обычно, либо отменяться в зависимости от решения пользователя.

0 голосов
/ 06 мая 2009

Вы можете отобразить диалог подтверждения на стороне клиента следующим образом:

<asp:Button ID="btnDelete" runat="server"
   OnClientClick="return confirm('really delete?');"
   OnClick="btnDelete_Click" />

PostBack будет выполняться только в том случае, если пользователь ответит в диалоговом окне подтверждения с помощью Да. В противном случае обратной передачи не произойдет, и обработчик на стороне сервера (btnDelete_Click) не будет вызван.

0 голосов
/ 06 мая 2009

Почему вы хотите отправить ответ на код позади? То, что вы можете сделать, находится в вашей кнопке, просто сделайте так, чтобы в случае отмены он просто не отправлял обратно вообще.

Сделайте что-то вроде следующего:

<asp:button id="mybutton" runat="server" 
 onclientclick="javascript:if(!confirm('Confirm delete?')) return false;" />

Это основная идея. Если вам действительно нужно, чтобы он все еще выполнял обратную передачу даже после отмены и передавал подтверждающий ответ, то лично я бы добавил asp: hidden в форму, и чтобы javascript соответствующим образом установил значение скрытого поля.

0 голосов
/ 06 мая 2009

Вы должны быть в состоянии сделать что-то вроде этого - он сработает только в ответ, если они выберут да:

<asp:Button ID="btnDelete" text="Delete" runat="server" 
OnClick="DoDeleteFunction();"  
OnClientClick="return confirm('Are you sure you want to delete?')">
</asp:Button>
0 голосов
/ 06 мая 2009

Если вы хотите использовать другой дизайн, для таких окон подтверждения я всегда использую ModalPopup в ASP.NET AJAX Control Toolkit. Таким образом, мне не нужно трогать javascript, и я могу больше контролировать происходящее, поскольку нажатие кнопки в модальном всплывающем окне даст мне обратную передачу.

0 голосов
/ 06 мая 2009

Вы можете проверить следующую ссылку, в которой я показываю, как выполнить подобное действие, используя элемент управления GridView.

http://www.highoncoding.com/Articles/138_GridView_Confirm_When_Delete.aspx

Дайте мне знать, если вам нужна дополнительная помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...