c# - 在 RowDataBound 中设置 OnClientClick 后事件未触发

标签 c# asp.net

我有一个 Asp.net GridView(使用数据绑定(bind)填充)。 我的专栏之一是 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>

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

最佳答案

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

<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 函数,并在用户单击“确定”时按预期在服务器端引发 RowCommand 事件。

(顺便说一句,这是 ASP.NET WebForms 缺点之一的一个很好的例子 - 生成了大量您无法控制的 html。ASP.NET MVC FTW!)

关于c# - 在 RowDataBound 中设置 OnClientClick 后事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2092954/

相关文章:

c# - WinRT FlipView.SelectedIndex 绑定(bind)不响应 ViewModel 中的更改

c# - 使用 linq 进行高级分组和聚合

c# - 作为通用结构的强类型 Guid

c# - ASP.NET 中的 GridView 不显示有或没有数据

c# - 在 xml 文件中搜索数据的最佳方式?

c# - 如何用.cs文件替换DLL文件?

c# - 检查更新结果失败

c# - 将月份添加到输入日期

asp.net - IE7 中的 CSS 问题

asp.net - 如何在复选框的 CheckedChanged 事件中获取中继器项目?