【问题标题】:A control with ID could not be found for the trigger in UpdatePanel在 UpdatePanel 中找不到触发器的 ID 控件
【发布时间】:2011-10-03 18:55:38
【问题描述】:

我有一个更新面板,其条件的 UpdateMode 和 ChildrenAsTriggers 设置为 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 控件位于中继器中,并且可能不会立即出现,因此它的行为就像它不存在一样。我该如何解决这个问题?

【问题讨论】:

    标签: c# asp.net ajax updatepanel repeater


    【解决方案1】:

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

    编辑:如果你真的想更新你的 updPnlMain 更新面板,有一个解决方案。您可以放入另一个更新面板并将您的按钮放在该面板中。例如

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

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

    它实际上会做你正在寻找的东西:)

    【讨论】:

    • 如果 ChildrenAsTriggers=false 则不会...这就是我在问题中所说的。
    • 那么我怎样才能让我的中继器控件子处于范围内?
    • 你只想更新你的UpdatePanel updPnlMain,点击按钮?
    • 我想要几个触发器。其中之一在 UpdatePanel 之外。另一个是中继器内部的 btnAddSomething 按钮。然而,在我的真实场景中,它实际上是一个带有 Command 事件的 LinkBut​​ton。我尝试设置 ChildrenAsTriggers="true" 这样我就不必手动指定触发器,但即便如此,链接按钮也不会导致异步回发。
    • stackoverflow.com/questions/30352866/… 我不知道为什么我的页面会进行完整的回发。请帮忙。
    猜你喜欢
    • 2012-08-21
    • 1970-01-01
    • 2011-01-16
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    相关资源
    最近更新 更多