当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在RowDataBound中设置OnClientClick后,事件未触发》经验,为你挑选了1个好方法。

我有一个Asp.net GridView(填充数据绑定).我的一个列是ButtonField(显然有自己的CommandName).

GridView_RowCommand作品完美,但如果我添加GridView_RowDataBound(其中我只需添加一个JavaScript确认)GridView_RowCommand不回发触发的事件.

可能是什么问题/解决方案?

添加代码以便更好地理解:

Aspx代码:


    
        
        
        
    

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)里面



1> Veli Gebrev..:

这是Image按钮正常发出的内容:


当你在代码隐藏中设置OnClientClick时,它会预先添加你的代码,但仍会添加__doPostBack函数调用,从而产生以下html:


onclick事件处理程序将在它有机会正确执行回发之前返回(它只会提交表单).

这样做:

(e.Row.Cells[e.Row.Cells.Count - 1].Controls[0] as ImageButton).OnClientClick = "if (!confirm('Do action?')) { return false; }";

应该允许客户端单击事件运行__doPostBack函数,并在用户单击"确定"时按预期引发RowCommand事件服务器端.

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

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有