При расширении веб-элемента управления asp.net при каком событии должны быть добавлены дополнительные веб-элементы управления?
-
08-07-2019 - |
Вопрос
Я пытаюсь избежать составного элемента управления или использования ASCX, расширяя существующий элемент управления. Однако у меня возникают проблемы с добавлением элементов управления к унаследованному элементу управления и сохранением их целостности состояния просмотра / постбека. Всякий раз, когда я добавляю элементы управления во время предварительного рендеринга, элементы управления отображаются, но постбэк вызывает исключение состояния представления. Я пытался добавить их и там, и во время LoadViewState (что, конечно, было глупо). Init недоступен из элемента управления, который я расширяю.
Исключение составляет Sys.WebForms.PageRequestManagerServerErrorException: Не удалось загрузить viewsstate. Контроль дерево, в котором находится вид загружен должен соответствовать дереву управления который был использован для сохранения состояния просмотра во время предыдущий запрос. Например, при динамическом добавлении элементов управления элементы управления, добавленные во время пост-возвращения должны соответствовать типу и положению элементы управления добавлены во время начальной Запрос
Решение
На самом деле, Microsoft говорит, что вы должны переопределить CreateChildControls метод.
Вы можете вызывать метод базового класса до или после добавления элементов управления, я не уверен, существует ли там соглашение.
protected override void CreateChildControls(){
Controls.Add(someControl);
base.CreateChildControls();
}
Надеюсь, это поможет!
Другие советы
Вы должны добавить их в OnInit или в CreateChildControls. В любом случае, чтобы избежать проблем с ViewState, читайте эта ОТЛИЧНАЯ статья . Возможно, образец "4. Инициализация дочерних элементов управления программно " это ваш случай.