为什么UpdatePanel触发器无法识别我的ControlID

问题描述

ASP.NET:

<asp:UpdatePanel runat="server" ID="up" UpdateMode="Conditional" ChildrenAsTriggers="true">
    <ContentTemplate>
        <asp:GridView runat="server" ID="gv" 
            ClientIDMode="Static"
            AllowPaging="true" 
            AutoGenerateColumns="false" 
            ShowHeaderWhenEmpty="true" 
            OnRowCommand="gv_RowCommand">
            <Columns>
                <asp:TemplateField HeaderText="">
                    <ItemTemplate>
                        <asp:ImageButton ImageUrl="~/eg.png" CommandName="er" ID="ero" runat="server" />
                        <asp:ImageButton ImageUrl="~/de.png" runat="server"  />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
        <asp:Panel ID="pop" runat="server" ClientIDMode="Static">
        </asp:Panel>
    </ContentTemplate>
</asp:UpdatePanel>

C#:

protected void gv_RowCommand(object sender,GridViewCommandEventArgs e)
{
    if (e.CommandName == "er")
    {
        pop.CssClass += " set100";

        up.Update();
    }
}

以上不适用于我。因此,我在UpdatePanel中添加了以下内容:

//...
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="ero" />
    </Triggers>
//...

现在我遇到以下错误:

Server Error in '/' Application.

A control with ID 'ero' could not be found for the trigger in UpdatePanel 'up'.

我不确定自己在做什么错。

我如何解决该问题?

解决方法

关注solution

protected void Page_Load(object sender,EventArgs e)
{

    if (!IsPostBack)
    {

    }

    foreach (var item in gv.Rows)
    {
        ImageButton btn = (ImageButton) ((GridViewRow)item).FindControl("ero");
        // Get current ScriptManager on the page
        ScriptManager.GetCurrent(this.Page).RegisterPostBackControl(btn);
    }
            
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...