Динамические серверные веб-элементы управления и состояние просмотра

Visual Studio 2010

Обновлен: Ноябрь 2007

При динамическом создании серверного веб-элемента управления во время выполнения некоторые сведения об элементе управления хранятся в состоянии просмотра, отображаемого на странице. При отправке страницы обратно на сервер нединамические элементы управления (определенные на странице) инициализируются в событии страницы Init, а сведения о режиме просмотра загружаются до того, как создаются заново динамические элементы управления (в основном в обработчике Page_Load). В результате, до того как динамические элементы управления создаются заново, режим отображения временно не синхронизирован с элементами управления страницы. После запуска события Page_Load до вызова методов обработки событий элементов управления, оставшиеся сведения о состоянии просмотра загружаются в динамически создаваемые элементы управления.

В большинстве случаев модель обработки состояния просмотра работает правильно. Обычно динамические элементы управления добавляются в конец контейнерной коллекции элементов управления. Сведения о состоянии просмотра, сохраненные для динамических элементов управления, следовательно, являются дополнительными данными в конце структуры состояния просмотра соответствующего контейнера и страница может игнорировать эти сведения, пока не созданы элементы управления.

Однако в двух случаях сведения о состоянии просмотра динамически создаваемых элементов управления могут вызывать проблемы.

  • При вставке динамических элементов управления между существующими элементами.

  • При динамической вставке элементов управления, а затем их повторной вставке в течение цикла обработки, но с другими значениями.

При вставке динамических элементов управления между существующими сведения о состоянии просмотра динамического элемента управления хранятся в соответствующем месте структуры состояния просмотра. При отправке страницы и загрузке состояния просмотра динамический элемент управления еще не существует. Таким образом, дополнительные сведения в состоянии просмотра не совпадают с надлежащим элементом управления. Это обычно приводит к ошибке, указывающей на недопустимое преобразование.

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

Дополнительные сведения о состоянии просмотра см. в разделах

Общие сведения о жизненном цикле веб-страниц ASP.NET

Общие сведения об управлении состоянием ASP.NET и ViewState.

Показ: