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