2009-05-06 7 views
2

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

ответ

6

Вы бы просто предотвратить обратный вызов от случаться, если пользователь попал отменить

Edit: а Джош Stodola отметил


<asp:Button runat="server" ID="Save" 
    OnClientClick="if (!confirm('Are you sure?')) return false;" /> 
+0

Продвижение, так как это ответ. – NotMe

1

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

<asp:button runat="server" id="mybutton" 
OnClientClick="return confirm('delete?');" /> 
+2

Вы должны вернуться только из события клика, если пользователь нажимает кнопку отмены (если функция подтверждения возвращает false). http://vaultofthoughts.net/OnClientClickBreaksValidation.aspx –

+0

@Josh: Я этого не знал. Вероятно, потому, что я никогда не беспокоился о проверке на стороне клиента .Net. Спасибо за ссылку/информацию. – NotMe

0

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

0

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

<asp:Button ID="btnDelete" text="Delete" runat="server" 
OnClick="DoDeleteFunction();" 
OnClientClick="return confirm('Are you sure you want to delete?')"> 
</asp:Button> 
0

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

ли что-то вроде следующего:

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

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

0

Вы можете показать диалог на стороне клиента подтверждение, как это:

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

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

0

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

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

0

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

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 диалогового окна подтверждения отображается, если пользователь нажимает «OK», то постбэк произойдет. Если пользователь нажимает «Отменить», ничего не произойдет.

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