2011-02-10 7 views
1

У меня есть страница с двумя UpdatePanels:Показать и обновить UpdatePanel после обратной передачи с другой UpdatePanel?

<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, страница должна переключать режимы. Код должен отображаться, а затем обновлять вторую панель в этой точке. Событие команда вызовет свойство 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: Не удалось найти UpdatePanel с ID ' ctl00_ctl11_DetailUpdatePanel. Если он обновляется динамически, он должен находиться внутри другой UpdatePanel.

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

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

ответ

0

Ассоциированный кнопку на первой панели, что приводит к тому, постбэк как Asynctrigger на другой панели

+0

Не должно работать ручное управление одинаково? У меня такое чувство, что я получаю ту же ошибку. –

+0

Я не думаю, поскольку updatepanle выполняет только частичный рендеринг, он может даже не отправлять через другой объект с запросом. – XtremeBytes

0

Когда ASP.NET получает запрос от панели обновления, его ответ включает в себя только содержимое этой панели в (плюс состояние отображения и данные проверки событий). Из Partial-Page Rendering Overview на MSDN:

An asynchronous postback behaves much like a synchronous postback. All the server page life-cycle events occur, and view state and form data are preserved. However, in the rendering phase, only the contents of the UpdatePanel control are sent to the browser. The rest of the page remains unchanged.

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

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

+0

По-видимому, у меня есть проблема с чтением сообщений об ошибках ... ответ был там все время: ... тогда он должен быть внутри другой UpdatePanel.. Я бы не сказал, что я намерен использовать UpdatePanels, и я избегаю их, когда это возможно, но правильный инструмент для правильной ситуации. Я уже использую jQuery для некоторых валидационных и визуальных элементов, но логика, которая отображает формы, довольно сложна, и я не заинтересован в репликации моей объектной модели на клиенте, чтобы избежать обновления. –

Смежные вопросы