我正在使用ASP数据网格,我有一个ButtonColumn。当按钮呈现给页面时,它是提交类型的输入。这是一个提交按钮。该按钮用于删除记录。但我希望有一些javascript确认用户想要删除记录。我遇到的问题是即使我从confirm方法返回false,提交事件仍然会发生......
以下是将javascript方法分配给click事件的服务器端代码:
Button deleteButton = e.Item.Cells[6].Controls[0] as Button;
if (deleteButton != null)
{
deleteButton.OnClientClick = "confirmDelete()";
}
以下是创建datagrid的ASP.net代码:
<asp:DataGrid
runat="server"
ID="UsersList"
OnItemCommand="UsersList_ItemCommand"
AutoGenerateColumns="false"
HeaderStyle-CssClass="dataTableHeader"
Width="60%">
<Columns>
<asp:HyperLinkColumn DataNavigateUrlField="Username" DataTextField="Username" HeaderText="Username" DataNavigateUrlFormatString="~/Account/EditUser.aspx?user={0}"/>
<asp:BoundColumn DataField="Email" HeaderText="Email" />
<asp:ButtonColumn Text="Delete" HeaderText="Delete" ButtonType="PushButton" CommandName="DeleteUser" CausesValidation="false" />
</Columns>
</asp:DataGrid>
以下是确认删除的Javscript代码:
<script>
function confirmDelete() {
var x = confirm("This action cannot be undone. Are you sure you want to delete this user?");
return x;
}
</script>
也许用ButtonColumn无法实现这一点。我正在考虑更改为TemplateColumn,只需在其中放置一个按钮。但是后来我将不得不重新设计在后端处理这些点击事件的代码,这些代码当前在ItemCommand处理程序中处理。
答案 0 :(得分:2)
尝试:
deleteButton.OnClientClick = "return confirmDelete()";
答案 1 :(得分:1)
如果您不想提交表单,请使用表单上的onsubmit侦听器替换按钮上的onclick侦听器,如果您不想提交表单,则返回false:
<form onsubmit="return confirmDelete();" ...>
如果 confirmDelete 返回false,则取消提交。如果它返回任何其他值,则提交表单。
答案 2 :(得分:1)
你需要在form.submit()上确认删除,而不是deletebutton.click(),但你需要通过deletebutton.click()为form.submit指定一个匿名验证函数,或者设置一个删除在deletebutton上单击标志,然后在form.submit()上检查该值。那样你想要提交表单的其他按钮仍然提交。并且不要忘记在验证失败后清除变量/或匿名函数。