У меня есть страница с двумя 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. Но это похоже на потерю пропускной способности, я надеюсь, что есть способ заставить это работать так, как я хочу.
Не должно работать ручное управление одинаково? У меня такое чувство, что я получаю ту же ошибку. –
Я не думаю, поскольку updatepanle выполняет только частичный рендеринг, он может даже не отправлять через другой объект с запросом. – XtremeBytes