我必须为一个简单的 Intranet 论坛制作一个删除按钮。我希望在删除帖子时有一个 javascript 警报框(或等效项)要求确认。但是,我发现很难将 javascript 确认框的结果输入到代码隐藏中。这甚至可能吗?还是我必须使用另一种设计?
8 回答
如果用户点击取消,您只需阻止回调发生
编辑:正如乔什·斯托多拉所指出的
<asp:Button runat="server" ID="Save"
OnClientClick="if (!confirm('Are you sure?')) return false;" />
你想做这样的事情:
<asp:button runat="server" id="mybutton"
OnClientClick="return confirm('delete?');" />
如果您想使用另一种设计,对于这样的确认框,我总是使用 ASP.NET AJAX 控件工具包中的 ModalPopup。这样我就不必触摸 javascript,并且可以更好地控制正在发生的事情,因为在模式弹出窗口中单击按钮会给我一个回发。
你应该能够做这样的事情 - 如果他们选择是,它只会触发帖子:
<asp:Button ID="btnDelete" text="Delete" runat="server"
OnClick="DoDeleteFunction();"
OnClientClick="return confirm('Are you sure you want to delete?')">
</asp:Button>
为什么要将响应发送到后面的代码?您可以做的是在您的按钮中,只需制作它,因此如果他们取消,它根本不会回发。
执行以下操作:
<asp:button id="mybutton" runat="server"
onclientclick="javascript:if(!confirm('Confirm delete?')) return false;" />
这是基本的想法。如果您确实需要它即使在取消后仍然回发,并通过确认响应,那么我个人会在表单中添加一个 asp:hidden,并让 javascript 适当地设置隐藏字段的值。
您可以像这样显示客户端确认对话框:
<asp:Button ID="btnDelete" runat="server"
OnClientClick="return confirm('really delete?');"
OnClick="btnDelete_Click" />
只有当用户用 Yes 回答确认对话框时,才会执行 PostBack。否则,不会发生回发,也不会调用服务器端处理程序 (btnDelete_Click)。
如果您有可用的 ASP.NET AJAX,请使用ConfirmButtonExtender。
您照常连接删除按钮背后的代码。然后将确认扩展器附加到它。它会自动插入适当的 JavaScript 为您提供模态确认(使用 bling,而不是浏览器警报样式),并且将正常进行或根据用户的决定取消。
我建议为此将标准按钮控件子类化,以便您将来可以再次重用代码。
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 确认对话框,如果用户单击“确定”,则会发生回发。如果用户单击“取消”,则不会发生任何事情。
一开始需要做更多的工作,但代码的可重用性要高得多,甚至可以完全移入一个单独的库并在多个项目中使用。