ASP.NET ImageButton Onclick事件未处理

时间:2009-10-20 15:44:00

标签: c# asp.net event-handling

我在GridView中有一个ImageButton。

<asp:GridView ID="ItemGridView" runat="server" DataKeyNames="Id" 
     OnRowDataBound="ItemGridView_RowDataBound" AllowPaging="True" 
     AllowSorting="True" EnableSortingAndPagingCallbacks="True" 
     AutoGenerateEditButton="False" AutoGenerateDeleteButton="false"
     DataSourceID="ItemDataSource" EnableViewState="true" >
    ....
    <asp:TemplateField ShowHeader="False" ItemStyle-Width="40px">
      <ItemTemplate>
         <asp:ImageButton ID="btnDelete" SkinID="btnDelete"
            runat="server" CausesValidation="false"
            OnClick="btnDeleteAccountItem_Click" 
            OnClientClick="javascript:return confirm('Are you sure?');" />
       </ItemTemplate>
    </asp:TemplateField>

以及删除按钮事件的相应处理程序

protected void btnDeleteAccountItem_Click(object sender, EventArgs e) {
    ImageButton btnDel = sender as ImageButton;
    GridViewRow row = (GridViewRow)btnDel.NamingContainer;
    ....
}

我在许多地方使用这个相同的构造,它工作正常。我现在有一个gridview,但它没有,我希望得到一些关于如何追查问题的想法。 当我单击按钮时,会触发客户端事件并显示警告框,然后回发后会触发Page_Load方法中的断点。所以按钮事件的客户端布线似乎工作。但是,不处理该事件,并且不会调用方法btnDeleteAccountItem_Click。

这是一个复杂的页面,我无法发布所有代码。我该怎样做才能缩小潜在原因?

5 个答案:

答案 0 :(得分:5)

您的活动定义不正确ImageButton.Click

protected void btnDeleteAccountItem_Click(object sender, ImageClickEventArgs e) {
    ImageButton btnDel = sender as ImageButton;
    GridViewRow row = (GridViewRow)btnDel.NamingContainer;
    ....
}

答案 1 :(得分:3)

我不确定这是否会解决它,但是一旦我在我的标记中放置了一个asp:Button控件并为它生成了'onClick'签名。

然后我改变主意并决定将其设为图像按钮......我只是自己重写了标签。

进行了这些更改之后,我意识到onClick签名不再起作用了...经过一些研究后我找到了答案......我使用的是'EventArgs'而不是'ImageClickEventArgs'......

(object sender, ImageClickEventArgs e)

一旦我更改了事件arg对象,它就开始正常工作了。

答案 2 :(得分:2)

而不是创建按钮单击事件,您可以使用datagrid row命令事件

然后您可以使用e.commandName和e.commandArgument找出按下了哪个按钮以及它的参数是什么:

 Private Sub gv1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles gv1.RowCommand
    If e.CommandName = "Whatever" Then
       // do something
     End If

希望有所帮助

答案 3 :(得分:1)

确保将CausesValidation设置为True。

答案 4 :(得分:0)

您可以尝试(您正在创建ImageButton的错误点击事件):

<asp:TemplateField ShowHeader="False" ItemStyle-Width="40px">
 <ItemTemplate>
  <asp:ImageButton ID="btnDelete" SkinID="btnDelete" runat="server"
   CausesValidation="false" OnClick="btnDeleteAccountItem_Click"
   OnClientClick="javascript:return confirm('Are you sure?');" />
 </ItemTemplate>
</asp:TemplateField>

并且对于图片按钮,点击事件会发生变化,如下所示:

protected void btnDelete_Click(object sender, ImageClickEventArgs e)
{
 ImageButton btnDel = sender as ImageButton;
 GridViewRow row = (GridViewRow)btnDel.NamingContainer;
}