Загрузка различных элементов управления в условную панель обновления после обратной передачи - PullRequest
1 голос
/ 13 апреля 2011

У меня есть разметка в этом формате: -

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

 <asp:UpdatePanel runat="server" ID="UpdatePanelMain" UpdateMode="Conditional">
    <ContentTemplate />
 </asp:UpdatePanel> 

На этой панели обновлений, если можно найти запись из базы данных, должен отображаться элемент управления DataGrid (с элементами управления меткой и раскрывающимся списком).Если нет, то должен отображаться элемент управления HtmlGenericControl DIV с соответствующим сообщением, в котором пользователю предлагается создать запись.Оба этих элемента управления создаются динамически, которые заполняются пользовательскими классами, использующими функции «output», такие как «ToString».

Если я тестирую операцию с несколькими последовательными элементами управления DataGrid, заполняющими UpdatePanel, это работает нормально.Аналогично, HtmlGenericControl DIV заполняется, как и ожидалось, также в нескольких последовательных последовательностях.

Однако, когда я тестирую другой тип элемента управления для заполнения UpdatePanel, это работает в первом случае, но любые дополнительные обратные передачи для заполнения UpdatePanel завершаются ошибкой идиалоговое окно предлагает:

Failed to load viewstate.  The control tree into which viewstate is being 
loaded must match the control tree that was used to save viewstate during
the previous request.  For example, when adding controls dynamically, the 
controls added during a post-back must match the type and position of the 
controls added during the initial request.

Я был убежден, что элемент управления UpdatePanel в этом случае получает контроль над состоянием просмотра для динамических элементов управления.

Как восстановить состояние представления, чтобы разрешить отображение нескольких типов элементов управления в одной и той же панели обновления?

Спасибо.

1 Ответ

0 голосов
/ 02 апреля 2012

Восстановить все динамические элементы управления (сохраните информацию для этого в ViewState или в любом другом определенном порядке) в том же порядке иерархии , что и последняя страница, сгенерированная вСобытия жизненного цикла «Инициирование» или «Загрузка».Это то же самое требование для обычных и асинхронных постбэков в ASP.NET WebForms.

Элементы управления должны быть добавлены - для соответствия иерархии элементов управления - и затем удаленыпосле событие «Load».

См.:

  1. DynamicControlsPlaceholder , который является предварительно созданным элементом управления, который поможет с этим.Также обсуждается, как это работает.
  2. Динамическая загрузка пользовательских элементов управления ASP NET .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...