[英]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.