2

我必须为一个简单的 Intranet 论坛制作一个删除按钮。我希望在删除帖子时有一个 javascript 警报框(或等效项)要求确认。但是,我发现很难将 javascript 确认框的结果输入到代码隐藏中。这甚至可能吗?还是我必须使用另一种设计?

4

8 回答 8

6

如果用户点击取消,您只需阻止回调发生

编辑:正如乔什·斯托多拉所指出的


<asp:Button runat="server" ID="Save" 
    OnClientClick="if (!confirm('Are you sure?')) return false;" />
于 2009-05-06T18:56:18.920 回答
1

你想做这样的事情:

    <asp:button runat="server" id="mybutton" 
OnClientClick="return confirm('delete?');" />
于 2009-05-06T18:58:58.583 回答
0

如果您想使用另一种设计,对于这样的确认框,我总是使用 ASP.NET AJAX 控件工具包中的 ModalPopup。这样我就不必触摸 javascript,并且可以更好地控制正在发生的事情,因为在模式弹出窗口中单击按钮会给我一个回发。

于 2009-05-06T18:59:31.640 回答
0

你应该能够做这样的事情 - 如果他们选择是,它只会触发帖子:

<asp:Button ID="btnDelete" text="Delete" runat="server" 
OnClick="DoDeleteFunction();"  
OnClientClick="return confirm('Are you sure you want to delete?')">
</asp:Button>
于 2009-05-06T19:00:48.207 回答
0

为什么要将响应发送到后面的代码?您可以做的是在您的按钮中,只需制作它,因此如果他们取消,它根本不会回发。

执行以下操作:

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

这是基本的想法。如果您确实需要它即使在取消后仍然回发,并通过确认响应,那么我个人会在表单中添加一个 asp:hidden,并让 javascript 适当地设置隐藏字段的值。

于 2009-05-06T19:01:33.493 回答
0

您可以像这样显示客户端确认对话框:

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

只有当用户用 Yes 回答确认对话框时,才会执行 PostBack。否则,不会发生回发,也不会调用服务器端处理程序 (btnDelete_Click)。

于 2009-05-06T19:02:00.030 回答
0

如果您有可用的 ASP.NET AJAX,请使用ConfirmButtonExtender

您照常连接删除按钮背后的代码。然后将确认扩展器附加到它。它会自动插入适当的 JavaScript 为您提供模态确认(使用 bling,而不是浏览器警报样式),并且将正常进行或根据用户的决定取消。

于 2009-05-06T19:02:13.693 回答
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 确认对话框,如果用户单击“确定”,则会发生回发。如果用户单击“取消”,则不会发生任何事情。

一开始需要做更多的工作,但代码的可重用性要高得多,甚至可以完全移入一个单独的库并在多个项目中使用。

于 2009-05-06T19:21:10.980 回答