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