我有一个Asp.net GridView (用数据绑定填充)。我的专栏文章之一是ButtonField (显然是他自己的CommandName)。
GridView_RowCommand工作得很好,但是如果我添加了一个GridView_RowDataBound (在其中我只是添加了一个javascript确认),那么GridView_RowCommand事件不会在PostBack中触发。
问题/解决办法是什么?
添加代码以更好地理解:
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>c#代码:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
(e.Row.Cells[e.Row.Cells.Count - 1].Controls[0] as ImageButton).OnClientClick = "javascript:return confirm (\"Do action?\");";
}
}
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "myaction")
{
DoMyAction();
}
}编辑:
我忘了告诉您,我的GridView在ajax TabContainer (AjaxControlToolkit)中。
发布于 2010-01-19 13:27:50
这是图像按钮通常发出的内容:
<input type="image" src="myaction.gif" alt="MyAction" onclick="javascript:__doPostBack('GridView1','myaction$1')" style="border-width:0px;" />当您在代码隐藏中设置OnClientClick时,它将在代码前面添加__doPostBack函数调用,从而生成以下html:
<input type="image" src="myaction.gif" alt="MyAction" onclick="javascript:return confirm('Do action?');javascript:__doPostBack('GridView1','myaction$1')" style="border-width:0px;" />onclick事件处理程序在获得正确执行回发的机会之前将返回(它将只提交表单)。
这样做:
(e.Row.Cells[e.Row.Cells.Count - 1].Controls[0] as ImageButton).OnClientClick = "if (!confirm('Do action?')) { return false; }";应该允许客户端单击事件运行__doPostBack函数,并在用户单击OK时按预期的方式引发RowCommand事件服务器端。
(顺便提一句,这是一个很好的例子,说明了ASP.NET WebForms的缺点之一--生成了大量的html,您只是无法控制。( ASP.NET MVC FTW!)
发布于 2010-01-19 13:08:28
乍一看,这似乎不错。您试过在TabContainer之外运行代码吗?
它可能会让你朝着正确的方向前进。
发布于 2018-06-22 12:32:02
使用发送方作为ClientScript.GetPostBackClientHyperlink函数的参数,以便创建客户端js事件dinamicaly。下面是RowDataBound中的示例,其中发送者是GridView (VB)。YourCommand将作为引发RowCommand事件的参数传递。
e.Row.Cells(columnIndex).Attributes.Add("onclick", ClientScript.GetPostBackClientHyperlink(sender, "YourCommand$" & e.Row.DataItemIndex))https://stackoverflow.com/questions/2092954
复制相似问题