代码之家  ›  专栏  ›  技术社区  ›  p4bl0

在rowdatabound中设置onclientclick后未触发事件

  •  2
  • p4bl0  · 技术社区  · 15 年前

    我有一个asp.net gridview(用数据绑定填充)。 我的专栏之一是Buttonfield(显然是用他自己的命令名)。

    这个 gridview行命令 很好,但是如果我加上 网格视图行数据绑定 (在这里我只需添加一个javascript确认) gridview行命令 事件未在回发中激发。

    问题/解决方案是什么?

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

    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)中

    3 回复  |  直到 7 年前
        1
  •  5
  •   Veli Gebrev    15 年前

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

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

    当您设置onclientclick in your code behind时,它将预先结束您的代码,但仍会添加“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; }";
    

    应允许客户端的click事件运行dopostback函数,并在用户单击ok时按预期启动rowcommand事件服务器端。

    (顺便说一句,这是一个很好的例子,说明了asp.net webforms的缺点之一——生成的html很多都是您无法控制的。ASP.NET MVC FTW!)

        2
  •  0
  •   Morten Anderson    15 年前

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

    它也许能帮你找到正确的方向。

        3
  •  0
  •   awh112    7 年前

    将发件人用作上的参数 ClientScript.GetPostBackClientHyperlink 函数,因此它将创建客户端js事件数据。举个例子 RowDataBound ,其中发件人是 GridView (VB)。 YourCommand 将作为参数传递给 RowCommand 要引发的事件。

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