Отображать и обновлять UpdatePanel после обратной передачи с другой UpdatePanel? - PullRequest
1 голос
/ 10 февраля 2011

У меня есть страница с двумя UpdatePanels:

<asp:UpdatePanel id="ListUpdatePanel" runat="server" UpdateMode="conditional">
<ContentTemplate>
  <asp:ListView ... </asp:ListView>
</ContentTemplate>
</asp:UpdatePanel>

<asp:UpdatePanel id="DetailUpdatePanel" runat="server" UpdateMode="conditional">
..
</asp:UpdatePanel>

В ListView на первой панели есть элементы управления обратной передачей.Что должно произойти, это когда страница захватывает событие из ListView, страница должна переключать режимы.Код должен отобразиться, а затем обновить 2-ю панель в этой точке.Событие команды приведет к установке свойства PageMode для редактирования, затем:

protected override void OnPreRender(EventArgs e)
{
    ListPanel.Visible = PageMode == PageModes.List;
    EditPanel.Visible = PageMode == PageModes.Edit;
    if (PageMode == PageModes.Edit)
    {
        EditUpdatePanel.Update();
    }
    else
    {
        ListUpdatePanel.Update();
    }
    base.OnPreRender(e);
}

Но это не работает, я получаю эту ошибку: ScriptResource.axd: 868Uncaught Sys.InvalidOperationException: Couldне удается найти UpdatePanel с идентификатором 'ctl00_ctl11_DetailUpdatePanel'.Если он обновляется динамически, то он должен быть внутри другой UpdatePanel.

Я бы ожидал этого, если бы мои панели были установлены в автоматический режим.Я чувствую, что есть кое-что, чего я не совсем понимаю.Если обратная передача происходит изнутри UpdatePanel, даже если для нее задано значение Conditional, этот элемент управления каким-либо образом связан с этой UpdatePanel?Есть ли способ заставить asp.net «вырваться» из данной UpdatePanel, но не выполнить полную обратную передачу?

Это произошло из-за того, что оба они были в одной и той же UpdatePanel, но мне нужно разделить их, потому что мне нужно реализовать логику, чтобы блокировать отправку в определенных ситуациях из панели Details, что будет трудноделать, если они находятся в той же панели обновления.Я подозреваю, что это сработало бы, если бы я рендерил их все время и использовал CSS, чтобы скрыть тот, с которым не хочу работать пользователь для данного режима.Или, альтернативно, поместите их обоих во внешнюю панель обновления.Но это похоже на большую потерю пропускной способности, я надеюсь, что есть способ заставить это работать так, как я хочу.

Ответы [ 2 ]

0 голосов
/ 10 февраля 2011

Когда ASP.NET получает запрос от панели обновления, его ответ включает только содержимое этой панели (плюс состояние просмотра и данные проверки события).Начиная с Обзор визуализации частичных страниц в MSDN:

Асинхронная обратная передача ведет себя подобно синхронной обратной передаче.Происходят все события жизненного цикла страницы сервера, а данные о состоянии и форме просмотра сохраняются.Однако на этапе рендеринга в браузер отправляется только содержимое элемента управления UpdatePanel.Остальная часть страницы остается неизменной.

(я также рекомендую самостоятельно посмотреть запросы и ответы в Firebug, Fiddler или другом подобном инструменте.)

Если вы 'Вы обязуетесь использовать панели обновления (а не jQuery или другую клиентскую библиотеку), вам придется поместить список и детали в одну панель.

0 голосов
/ 10 февраля 2011

Связать кнопку на первой панели, которая вызывает обратную передачу, как Asynctrigger на другой панели

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