为什么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'.

我不确定我做错了什么。

我该如何解决这个问题?

遵循此解决方案

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);
}

}

最新更新