我有一个Asp.net GridView(填充数据绑定).我的一个列是ButtonField(显然有自己的CommandName).
该GridView_RowCommand作品完美,但如果我添加GridView_RowDataBound(其中我只需添加一个JavaScript确认)GridView_RowCommand不回发触发的事件.
可能是什么问题/解决方案?
添加代码以便更好地理解:
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>
Run Code Online (Sandbox Code Playgroud)
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();
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
我忘了告诉我的GridView在ajax TabContainer(AjaxControlToolkit)里面
这是Image按钮正常发出的内容:
<input type="image" src="myaction.gif" alt="MyAction" onclick="javascript:__doPostBack('GridView1','myaction$1')" style="border-width:0px;" />
Run Code Online (Sandbox Code Playgroud)
当你在代码隐藏中设置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;" />
Run Code Online (Sandbox Code Playgroud)
onclick事件处理程序将在它有机会正确执行回发之前返回(它只会提交表单).
这样做:
(e.Row.Cells[e.Row.Cells.Count - 1].Controls[0] as ImageButton).OnClientClick = "if (!confirm('Do action?')) { return false; }";
Run Code Online (Sandbox Code Playgroud)
应该允许客户端单击事件运行__doPostBack函数,并在用户单击"确定"时按预期引发RowCommand事件服务器端.
(作为旁注,这是ASP.NET WebForms的一个缺点的一个很好的例子 - 有很多html被生成,你无法控制.ASP.NET MVC FTW!)
| 归档时间: |
|
| 查看次数: |
9145 次 |
| 最近记录: |