Не удалось найти UpdatePanel с идентификатором "xxx". Если он обновляется динамически, он должен находиться внутри другой UpdatePanel
У меня есть страница с элементами управления Ajax Tab, внутри одной из вкладок которой находится веб-элемент управления Telerik RadGrid с формами редактирования, указывающими на другой веб-элемент управления. Эта форма редактирования также содержит вкладки Ajax, и на одной из этих вкладок есть модальное всплывающее окно Ajax еще одного веб-элемента управления.
Первоначальный веб-контроль работает нормально, когда используется на своей странице, но форма редактирования не отображается, когда элемент управления используется на вкладках Ajax по желанию. Диспетчер сценариев выдает следующую ошибку:
Ошибка времени выполнения Microsoft JScript: Sys.InvalidOperationException: Не удалось найти панель обновления с идентификатором 'xxx'. Если он обновляется динамически, он должен быть внутри другой UpdatePanel.
Любая помощь с этим будет оценена.
Ответы
Ответ 1
Эта проблема возникает в Telerik RadAjaxManager, когда вы добавляете к нему невидимые элементы управления.
Поэтому, если вам нужно отображать/скрывать элементы управления AJAX, рекомендуется добавлять параметры AJAX грамматически из вашего кода позади (на основе состояния видимости управления) вместо кода ASPX.
Для получения дополнительной информации: Пожалуйста, проверьте этот ответ на форумах Telerik.
Ответ 2
Ну, я рассматриваю эту ошибку в вашем сценарии. Если вы показываете/скрываете панель обновления, она выдаст эту ошибку. Мне известно, что лучшее решение, которое сработало, - это поместить вашу панель обновлений в шаблон содержимого другой панели обновлений, которая будет родительской для панели обновлений, которую вы показываете/скрываете.
<asp:UpdatePanel ID="Panel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:UpdatePanel ID="Panel2" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Label ID="labwl1" runat="server" Text="Label">
</asp:Label>
</ContentTemplate>
</asp:UpdatePanel >
</ContentTemplate>
</asp:UpdatePanel >
Теперь, если вы скроете панель обновления с идентификатором Panel2
, это не даст никакой ошибки.
Ответ 3
Чтобы начать работу с устранением неполадок, я лично попытаюсь удалить часть кода и тем самым указать причину ошибки. Например, удалите сетку и динамически загрузите пользовательский элемент управления на вкладке, чтобы увидеть, остается ли проблема, затем удалите внутреннюю вкладку ajax или модальное всплывающее окно и выполните другую проверку и т.д.
Ответ 4
В большинстве случаев - если контейнер/родитель этого панели обновлений trRow
и у вас есть где-то в коде вроде trRow.Visible = false;
, тогда он не найдет упомянутую обновленную панель и не выкинет ошибку.
Ответ 5
Это правильно, я потратил 2 часа, чтобы узнать, почему весь мой код перестает работать...
оказалось, что я немного немного очистил свой код и удалил закрытие моей панели обновления...
<asp:UpdatePanel ID="submitupdatepanel" runat="server">
<ContentTemplate>
<div class="block" style="height: 60px; width: 400px;">
<div class="centered">
<asp:LinkButton ID="submitbutton" runat="server" CssClass="button_red2 " Text=" <span>Submit </span>">
</asp:LinkButton>
<asp:LinkButton ID="cancelbutton" runat="server" CssClass="button_gray2 " Text=" <span>Cancel</span>" Visible="false" OnClientClick="window.close()">
</asp:LinkButton>
</div>
</ContentTemplate>
</asp:UpdatePanel>
<br />
<div style='display: none'>
<asp:UpdatePanel runat="server">
<ContentTemplate>
<asp:PlaceHolder ID="myhiddenpopups2" runat="server" Visible="true"></asp:PlaceHolder>
</ContentTemplate>
</asp:UpdatePanel>
</div>
который затем дал ту же самую ошибку в скрытой части обновляемой части под ней.
После того, как я вернул отсутствующий код, он вернулся к нормальному состоянию
<asp:UpdatePanel ID="submitupdatepanel" runat="server">
<ContentTemplate>
<div class="block" style="height: 60px; width: 400px;">
<div class="centered">
<asp:LinkButton ID="submitbutton" runat="server" CssClass="button_red2 " Text=" <span>Submit </span>">
</asp:LinkButton>
<asp:LinkButton ID="cancelbutton" runat="server" CssClass="button_gray2 " Text=" <span>Cancel</span>" Visible="false" OnClientClick="window.close()">
</asp:LinkButton>
</div>
</div>
</ContentTemplate>
</asp:UpdatePanel>
<br />
<div style='display: none'>
<asp:UpdatePanel runat="server">
<ContentTemplate>
<asp:PlaceHolder ID="myhiddenpopups2" runat="server" Visible="true"></asp:PlaceHolder>
</ContentTemplate>
</asp:UpdatePanel>
</div>
Надеюсь, это поможет кому-то.
К
Ответ 6
Я решил проблему, удалив UpdatePanel на начальной вкладке, содержащей WebControl. Я не понимаю, почему это должно было вызвать проблему, хотя, если кто-нибудь может это объяснить, мне было бы интересно узнать.
Так, например, я изначально имел это:
<cc1:TabContainer ID="TabContainer1" runat="server" ActiveTabIndex="0" OnClientActiveTabChanged="TabContainer1_OnChanged" Visible="true" >
<cc1:TabPanel runat="server" ID="TabPriorities">
<HeaderTemplate>Manage Prioritys</HeaderTemplate>
<ContentTemplate>
<asp:UpdatePanel ID="UpdatePanelPriorities" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<uc1:PriorityGrid ID="PriorityGrid1" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
</ContentTemplate>
</cc1:TabPanel>
И я изменил его на:
<cc1:TabContainer ID="TabContainer1" runat="server" ActiveTabIndex="0" OnClientActiveTabChanged="TabContainer1_OnChanged" Visible="true" >
<cc1:TabPanel runat="server" ID="TabPriorities">
<HeaderTemplate>Manage Prioritys</HeaderTemplate>
<ContentTemplate>
<uc1:PriorityGrid ID="PriorityGrid1" runat="server" />
</ContentTemplate>
</cc1:TabPanel>
И это разрешило ошибку script, выходящую из пользовательского элемента управления, которая также содержала вкладки ajax и модальное всплывающее окно.
Ответ 7
Это может быть вызвано закрытым тегом или отсутствующим конечным тегом.
Ответ 8
Моя страница содержит несколько обновленных панелей. Я исправил эту ошибку, убедившись, что все они были видимыми и не отображались: none.
Вы можете найти, какая панель вызывает ошибку, просмотрев источник страницы и ищется идентификатор, который вам дает ошибка.
Ответ 9
EDIT: я хотел бы пересмотреть свой ответ на основе некоторых новых вещей, которые я обнаружил при работе с панелями обновлений в UpdateMode = "Условный".
Это все еще в контексте адресации проблемы OP, связанной с указанной выше ошибкой.
Сценарий для меня заключается в том, что у меня есть родительская панель обновлений с несколькими вложенными дочерними панелями обновлений:
<asp:UpdatePanel ID="upParent" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<%-- Header Content --%>
<asp:UpdatePanel ID="upChild1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<%-- Child1 Content --%>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="upChild2" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<%-- Child2 Content --%>
</ContentTemplate>
</asp:UpdatePanel>
<asp:Button ID="btnEditMode" runat="server" Text="Edit" OnClick="btnEditMode_Click"></asp:Button>
</ContentTemplate>
</asp:UpdatePanel>
Чтобы кнопка "Изменить" изменила контент на обеих дочерних панелях обновлений, а также обновила общую панель обновления родителя без каких-либо проблем, вам может потребоваться выполнить асинхронную обратную передачу:
<asp:UpdatePanel ID="upParent" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnEditMode" EventName="Click" />
</Triggers>
<ContentTemplate>
<%-- Header Content --%>
<asp:UpdatePanel ID="upChild1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<%-- Child1 Content --%>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="upChild2" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<%-- Child2 Content --%>
</ContentTemplate>
</asp:UpdatePanel>
<asp:Button ID="btnEditMode" runat="server" Text="Edit" OnClick="btnEditMode_Click"></asp:Button>
</ContentTemplate>
</asp:UpdatePanel>
Это работает для меня, я больше не получаю вышеупомянутую ошибку (OP).
Интересно, что почти похож на сценарий OP, я работал с Ajax Tab Controls, и на каждой вкладке были дочерние панели обновлений. Вот где я столкнулся с тем же сообщением об ошибке и разрешил его, добавив асинхронный триггер обратной связи.
Ответ 10
В моем случае у меня было 2 панели обновления на странице, но только у одной из них был идентификатор. Установка идентификатора для другого исправила ошибку.