【问题标题】:How to make a gridView command field button into an ajax update panel PostBackTrigger如何将 gridView 命令字段按钮制作成 ajax 更新面板 PostBackTrigger
【发布时间】:2026-01-11 23:45:01
【问题描述】:

我在 ajax 更新面板中有一个 gridview。我已将不同的按钮事件设置为 AsyncPostBackTriggers,但我希望选择按钮打开子网页,因此它必须是回发。我尝试了以下方法:

<Triggers>
      <asp:AsyncPostBackTrigger ControlID="gvClients" EventName="RowCancelingEdit" />
      <asp:AsyncPostBackTrigger ControlID="gvClients" EventName="RowEditing" />
      <asp:AsyncPostBackTrigger ControlID="gvClients" EventName="RowUpdated" />
      <asp:AsyncPostBackTrigger ControlID="gvClients" EventName="RowUpdating" />
      <asp:AsyncPostBackTrigger ControlID="gvClients" EventName="Sorted" />
      <asp:AsyncPostBackTrigger ControlID="gvClients" EventName="Sorting" />
      <asp:PostBackTrigger ControlID="gvClients" />
</Triggers>

我收到以下错误:“System.ArgumentException: 无法通过 RegisterAsyncPostBackControl 和 RegisterPostBackControl 注册 ID 为“gvClients”的控件。如果与目标控件关联的触发器有冲突,则可能发生这种情况。”

我尝试从后面的代码中访问选择按钮并将其设置为触发器。

这是代码:

   protected void gvClients_RowDataBound(object sender, GridViewRowEventArgs e)
    {
       if (e.Row.RowType == DataControlRowType.DataRow)
        {     
            Button btnDtls = (Button)e.Row.Cells[0].Controls[2];
            string btnDtlsId = btnDtls.ID;
            PostBackTrigger trigger = new PostBackTrigger();
            trigger.ControlID = btnDtlsId;
            UpdatePanel1.Triggers.Add(trigger);
        }
    }

在调试中,我看到按钮的 ID 是“ctl01”,但出现此错误:“在 UpdatePanel 'UpdatePanel1' 中找不到触发器的 ID 为 'ctl01' 的控件”。有没有办法访问控制字段选择按钮并将其设置为 PostBackTrigger?

【问题讨论】:

    标签: c# asp.net gridview triggers updatepanel


    【解决方案1】:

    由于按钮位于模板内,因此其最终 id 不同,您可以从 UniqueID 属性中获取它。 http://msdn.microsoft.com/en-us/library/system.web.ui.control.uniqueid.aspx

    【讨论】:

    • 该按钮不在模板中,它是一个常规的命令字段选择按钮。
    • 不是在网格里面吗?网格有模板。如果所有行中的所有按钮都具有相同的服务器ID,那么服务器如何区分它们?
    • 我尝试过,但收到以下错误:“System.InvalidOperationException:在 UpdatePanel 'UpdatePanel1' 中找不到触发器的 ID 为 'ctl00$ContentPlaceHolder1$gvClients$ctl02$ctl01' 的控件。 "
    • 这是另一种解决方案。在按钮单击事件中写入“UpdatePanel1.Update()。在此处查看 cmets:*.com/questions/5552969/…
    • 在加载网格时,在 RowDaraBound 事件中抛出错误。点击事件中的代码可以在这里帮助吗?