Не удалось найти панель обновления с идентификатором «xxx». Если он обновляется динамически, то он должен быть внутри другой UpdatePanel - PullRequest
14 голосов
/ 14 октября 2010

У меня есть страница с элементами управления Ajax Tab, внутри одной из вкладок которой находится веб-элемент управления Telerik RadGrid с формами редактирования, указывающими на другой веб-элемент управления.Эта форма редактирования также содержит вкладки Ajax, и на одной из этих вкладок есть модальное всплывающее окно Ajax еще одного веб-элемента управления.

Начальный веб-элемент управления работает нормально, когда используется на своей собственной странице, но форма редактирования не отображаетсякогда элемент управления используется во вкладках Ajax по желанию.Диспетчер сценариев выдает следующую ошибку:

Ошибка времени выполнения Microsoft JScript: Sys.InvalidOperationException: Не удалось найти UpdatePanel с идентификатором «xxx».Если он обновляется динамически, то он должен быть внутри другой UpdatePanel.

Любая помощь с этим будет оценена.

Ответы [ 10 ]

14 голосов
/ 07 июня 2011

Эта проблема возникает в Telerik RadAjaxManager, когда вы добавляете к нему невидимые элементы управления.

Так что в случае, если вам нужно показать / скрыть элементы управления AJAX, рекомендуется грамматически добавлять параметры AJAX из своего кода (на основе состояния видимости управления) вместо кода ASPX.

Для получения дополнительной информации: Пожалуйста, проверьте этот ответ на форумах Telerik.

7 голосов
/ 16 ноября 2012

Ну, я считаю, что эта ошибка появляется в вашем скрипте. Если вы показываете / скрываете панель обновления, она выдаст эту ошибку. Лучшее из известных мне решений, которое сработало, - это поместить вашу панель обновлений в шаблон содержимого другой панели обновлений, которая будет родительской для панели обновлений, которую вы показываете / скрываете.

<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, это не даст никакой ошибки.

2 голосов
/ 16 января 2013

В большинстве случаев - если контейнер / родительский элемент этой панели обновлений равен trRow, и у вас есть где-то код, такой как trRow.Visible = false;, тогда он не найдет указанную панель обновления и не выдаст ошибку.

2 голосов
/ 14 октября 2010

Чтобы начать с устранения неполадок, я лично постараюсь удалить части кода и, таким образом, указать причину ошибки.Например, удалите сетку и динамически загрузите пользовательский элемент управления, нажав на вкладку, чтобы увидеть, сохраняется ли проблема, затем удалите внутреннюю вкладку ajax или модальное всплывающее окно и выполните другую проверку и т. Д.

1 голос
/ 15 ноября 2014

Это верно, я потратил 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>

Надеюсь, это кому-нибудь поможет.K

1 голос
/ 14 октября 2010

Я решил проблему, удалив 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>

И это решило ошибку скрипта, исходящую из пользовательского элемента управления, который также содержал вкладки ajax и модальное всплывающее окно.

0 голосов
/ 12 апреля 2019

В моем случае на странице было 2 панели обновления, но только у одной из них был идентификатор.Установка идентификатора для другого исправила ошибку.

0 голосов
/ 23 марта 2015

РЕДАКТИРОВАТЬ: Я хотел бы пересмотреть мой ответ на основе некоторых новых вещей, которые я обнаружил при работе с панелями обновления в UpdateMode = "Условный".

Это все еще в контексте решения проблемы ОП, связанной с вышеуказанной ошибкой.

Сценарий для меня заключается в том, что у меня есть родительская панель обновлений с несколькими вложенными дочерними панелями обновлений:

    <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, и каждая вкладка содержала дочерние панели обновлений. Именно здесь я обнаружил точно такое же сообщение об ошибке и исправил его, добавив асинхронный триггер обратной записи.

0 голосов
/ 03 февраля 2015

Моя страница содержит несколько панелей обновления.Я исправил эту ошибку, убедившись, что все они были видны и не имели отображения: нет.

Чтобы узнать, какая панель вызывает ошибку, просмотрите источник страницы и найдите идентификатор ошибки.дает вам.

0 голосов
/ 17 июля 2013

Это может быть вызвано незамкнутым тегом или отсутствующим конечным тегом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...