首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在RowDataBound中设置RowDataBound后不触发事件

在RowDataBound中设置RowDataBound后不触发事件
EN

Stack Overflow用户
提问于 2010-01-19 11:08:00
回答 3查看 9.8K关注 0票数 2

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

GridView_RowCommand工作得很好,但是如果我添加了一个GridView_RowDataBound (在其中我只是添加了一个javascript确认),那么GridView_RowCommand事件不会在PostBack中触发。

问题/解决办法是什么?

添加代码以更好地理解:

Aspx代码:

代码语言:javascript
复制
<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#代码:

代码语言:javascript
复制
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)中。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-01-19 13:27:50

这是图像按钮通常发出的内容:

代码语言:javascript
复制
<input type="image" src="myaction.gif" alt="MyAction" onclick="javascript:__doPostBack('GridView1','myaction$1')" style="border-width:0px;" />

当您在代码隐藏中设置OnClientClick时,它将在代码前面添加__doPostBack函数调用,从而生成以下html:

代码语言:javascript
复制
<input type="image" src="myaction.gif" alt="MyAction" onclick="javascript:return confirm('Do action?');javascript:__doPostBack('GridView1','myaction$1')" style="border-width:0px;" />

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

这样做:

代码语言:javascript
复制
(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!)

票数 5
EN

Stack Overflow用户

发布于 2010-01-19 13:08:28

乍一看,这似乎不错。您试过在TabContainer之外运行代码吗?

它可能会让你朝着正确的方向前进。

票数 0
EN

Stack Overflow用户

发布于 2018-06-22 12:32:02

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

代码语言:javascript
复制
e.Row.Cells(columnIndex).Attributes.Add("onclick", ClientScript.GetPostBackClientHyperlink(sender, "YourCommand$" & e.Row.DataItemIndex))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2092954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档