2009-10-20 111 views
2

我在GridView中有一个ImageButton。ASP.NET ImageButton Onclick事件没有处理

<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

你检查的任何信息在Page_Load中,例如IsPostBack是否为true或表单集合中的EVENTTARGET值? – 2009-10-20 15:48:40

+0

IsPostBack为true,表单集合显示为空。那是什么意思? – cdonner 2009-10-20 16:01:28

+0

我应该补充说,GridView位于MultiView控件上,并且表单标签位于母版页中。 – cdonner 2009-10-20 16:18:01

回答

5

您的活动定义错误ImageButton.Click

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

你是对的,但正如我所说的,代码在其他页面上的工作原理,并更改事件参数类型没有解决问题。在页面上必须有其他的东西来打破这个。 – cdonner 2009-10-20 17:01:00

+0

您的OnClientClick是否进行除确认之外的其他操作? – 2009-10-20 17:16:20

+0

不,只是弹​​出提示框。 – cdonner 2009-10-20 17:23:14

2

,而不是创建一个按钮单击事件,你可以使用DataGrid行命令事件

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

我不知道这是否会解决这个问题,但一旦我把一个ASP:按钮控制在我的标记,太为它产生的“onClick”的签名。

然后我改变了主意,决定让它成为一个图像按钮......我只是自己重写了标签。

做出这些改变之后,我意识到的onClick签名不能正常工作了......经过一番研究,我找到了答案......我用“的EventArgs”而不是“ImageClickEventArgs” ......

(object sender, ImageClickEventArgs e) 

一旦我改变了事件参数对象,它就像平常一样开始工作。

+1

取得一些进展 - 修复事件参数后,EVENTTARGET值现在位于表单集合中,它是问题中的图像按钮。 – cdonner 2009-10-20 17:06:03

1

确保的CausesValidation设置为True。

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> 

和图像按钮有像click事件的变化如下:

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