我在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。
这是一个复杂的页面,我无法发布所有代码。我该怎样做才能缩小潜在原因?
答案 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;
}