如何取消按下ButtonColumn导致的提交事件

时间:2011-06-20 23:37:49

标签: c# javascript .net asp.net

我正在使用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处理程序中处理。

3 个答案:

答案 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()上检查该值。那样你想要提交表单的其他按钮仍然提交。并且不要忘记在验证失败后清除变量/或匿名函数。