При расширении веб-элемента управления asp.net при каком событии должны быть добавлены дополнительные веб-элементы управления? - PullRequest
3 голосов
/ 17 ноября 2008

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

Исключение составляет Sys.WebForms.PageRequestManagerServerErrorException: Не удалось загрузить viewsstate. Контроль дерево, в котором находится вид загружен должен соответствовать дереву управления который был использован для сохранения состояния просмотра во время предыдущий запрос. Например, при динамическом добавлении элементов управления элементы управления, добавленные во время пост-возвращения должны соответствовать типу и положению элементы управления добавлены во время начальной запрос

Ответы [ 2 ]

4 голосов
/ 17 ноября 2008

На самом деле, Microsoft говорит, что вы должны переопределить метод CreateChildControls .

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

protected override void CreateChildControls(){
  Controls.Add(someControl);
  base.CreateChildControls();
}

Надеюсь, это поможет!

3 голосов
/ 17 ноября 2008

Вы должны добавить их в OnInit или в CreateChildControls. В любом случае, чтобы избежать проблем с ViewState, прочитайте эту БОЛЬШУЮ статью . Возможно, пример «4. Инициализация дочерних элементов управления программно» - ваш случай.

...