C# 在RowDataBound中设置OnClientClick后未触发事件

C# 在RowDataBound中设置OnClientClick后未触发事件,c#,asp.net,C#,Asp.net,我有一个Asp.net GridView(使用数据绑定填充)。 我的一个专栏是ButtonField(显然有他自己的CommandName) GridView_row命令工作得很好,但是如果我添加了GridView_RowDataBound(在其中我只添加了一个javascript确认),则在回发中不会触发GridView_row命令事件 问题/解决方案是什么 添加代码以更好地理解: Aspx代码: <asp:GridView ID="GridView1" runat="server"

我有一个Asp.net GridView(使用数据绑定填充)。 我的一个专栏是ButtonField(显然有他自己的CommandName)

GridView_row命令工作得很好,但是如果我添加了GridView_RowDataBound(在其中我只添加了一个javascript确认),则在回发中不会触发GridView_row命令事件

问题/解决方案是什么

添加代码以更好地理解:

Aspx代码:

<asp:GridView ID="GridView1" runat="server" 
    OnRowCommand="GridView1_RowCommand" 
    onrowdatabound="GridView1_RowDataBound">
    <Columns>
        <asp:BoundField DataField="MyField1" HeaderText="MyField1" />
        <asp:BoundField DataField="MyField2" HeaderText="MyField2" />
        <asp:ButtonField Text="MyAction" ButtonType="Image" ImageUrl="myaction.gif" CommandName="myaction" />
    </Columns>
</asp:GridView>
编辑:


我忘了告诉我GridView在ajax选项卡容器(AjaxControlToolkit)中。

乍一看,这似乎很好。您是否尝试过在TabContainer之外运行代码


这可能会让您走上正确的方向。

这是图像按钮通常发出的信号:

<input type="image" src="myaction.gif" alt="MyAction" onclick="javascript:__doPostBack('GridView1','myaction$1')" style="border-width:0px;" />
应允许客户端click事件运行_doPostBack函数,并在用户单击OK时按预期在服务器端引发RowCommand事件


(作为旁注,这是ASP.NET WebForms缺点之一的一个很好的例子-生成了很多html,您无法控制.ASP.NET MVC FTW!)

ClientScript.GetPostBackClientHyperlink
函数上使用sender作为参数,这样它将创建客户端js事件。下面是
RowDataBound
中的示例,其中发送方是
GridView
(VB)。
YourCommand
将作为要引发的
RowCommand
事件的参数传递

e.Row.Cells(columnIndex).Attributes.Add("onclick", ClientScript.GetPostBackClientHyperlink(sender, "YourCommand$" & e.Row.DataItemIndex))

成功了!非常感谢。我仍然想知道为什么“javascript:return-confirm(\'Do-action?\”);不同于“if(!confirm('Do-action?){return-false;}”,顺便说一句,你是对的:ASP.NET MVC-FTW!我试着回答我自己。。如果我单击“否”,工作版本将返回false,但如果我单击“是”,工作版本将不会返回true。您已经找到了:)很高兴我能提供帮助。
<input type="image" src="myaction.gif" alt="MyAction" onclick="javascript:return confirm('Do action?');javascript:__doPostBack('GridView1','myaction$1')" style="border-width:0px;" />
(e.Row.Cells[e.Row.Cells.Count - 1].Controls[0] as ImageButton).OnClientClick = "if (!confirm('Do action?')) { return false; }";
e.Row.Cells(columnIndex).Attributes.Add("onclick", ClientScript.GetPostBackClientHyperlink(sender, "YourCommand$" & e.Row.DataItemIndex))