繁体   English   中英

ASP.NET ImageButton Onclick事件未处理

[英]ASP.NET ImageButton Onclick Event not handled

我在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。

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

您的事件定义不正确ImageButton.Click

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

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

然后我改变主意,决定把它变成一个Image按钮......我只是自己重写了这个标签。

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

(object sender, ImageClickEventArgs e)

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

您可以使用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

希望能帮助到你

确保将CausesValidation设置为True。

您可以尝试(您正在创建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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM