Элемент управления с идентификатором не удалось найти для триггера в UpdatePanel



У меня есть панель обновления, у которой 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 находится в ретрансляторе и может отсутствовать сразу, он действует так, как будто его нет. Как мне это обойти?

657   1  

1 ответ:

Потому что Ваш контроль находится в repeater control и он выходит за рамки Trigger collection. Кстати, вам не нужно add trigger , потому что ваш элемент управления кнопкой уже находится в UpdatePanel, он будет обновляться при нажатии кнопки.

Edit: есть решение, если вы действительно хотите обновить панель обновления updPnlMain. Вы можете поместить в другую панель обновления и поместить свою кнопку в эту панель. например

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

, а затем просто вызовите метод updPnlMain.Update(); в событии btnAddSomething_Click.

Это действительно будет делать то, что вы ищете:)

Comments

    Ничего не найдено.