无法在UpdatePanel中找到具有ID的控件

时间:2011-07-12 16:08:09

标签: c# asp.net ajax updatepanel repeater

我有一个更新面板,其条件和ChildrenAsTriggers的UpdateMode设置为false。我只想要几个控件来导致异步回发:

<asp:UpdatePanel ID="updPnlMain" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false">
<ContentTemplate>

      // ...
      <asp:Repeater ID="rptListData" runat="server">
          <ItemTemplate>
              <asp:Button ID="btnAddSomething" runat="server" OnClick="btnAddSomething_Click" />
          </ItemTemplate>
      </asp:Repeater>
      // ...
</ContentTemplate>
<Triggers>
    <asp:AsyncPostBackTrigger ControlID="btnAddSomething" EventName="Click" />
</Triggers>
</asp:UpdatePanel>

当我尝试加载此页面时出现以下错误:

A control with ID 'btnAddSomething' could not be found for the trigger in UpdatePanel 'updPnlMain'.

由于我的btnAddSomething控件位于转发器中,并且可能不会立即存在,因此它的行为就像它不存在一样。我怎么能绕过这个?

1 个答案:

答案 0 :(得分:13)

因为您的控件位于repeater control,并且它超出了Trigger collection的范围。顺便说一下,您不需要add trigger,因为您的按钮控件已经在UpdatePanel中,当您点击按钮时它会更新。

编辑:如果您确实要更新updPnlMain更新面板,可以使用解决方案。您可以放入另一个更新面板并将按钮放在该面板中。 e.g。

<asp:UpdatePanel ID="updButton" runat="server" UpdateMode="Conditional">
  <asp:Button ID="btnAddSomething" runat="server" OnClick="btnAddSomething_Click" />
</ContentTemplate>

然后只需在updPnlMain.Update();事件中调用btnAddSomething_Click方法。

它实际上会做你想要的:)