Какое правильное ASP.NET Управляющее событие / метод, в который нужно добавлять вложенные элементы управления?

#asp.net #user-controls #webforms #asp.net-controls #createchildcontrols

#asp.net #пользовательские элементы управления #веб-формы #asp.net-controls #createchildcontrols

Вопрос:

Какое правильное событие / метод в ASP.NET жизненный цикл для динамического добавления дочерних элементов управления ?

Моя цель — убедиться, что все элементы управления вводом в пользовательском элементе управления имеют правильные связанные элементы проверки и метки, основанные на конфигурации из внешнего файла.

Кажется, что правильное место должно быть либо OnInit(EventArgs e) или CreateChildControls() . Оба они ведут себя немного неожиданно, и вместо того, чтобы пытаться отлаживать каждый из них, я решил сначала спросить вас, ребята, какой из них (или другой) использовать.

Комментарии:

1. Не могли бы вы объяснить, какие у вас проблемы?

2. @asawyer, я перемещал вещи, пытаясь разобраться в этом. До сих пор я получал OutOfMemoryException (заставляя меня думать, что я вызывал бесконечный цикл), «Найдено несколько элементов управления с одинаковым идентификатором’dynamicallyAddedRequiredFieldValdiator'» (заставляя меня думать, что я поместил его куда-то, из-за чего процедура вызывалась дважды), «Коллекция была изменена, перечисление можетошибка «не выполняется» и «Коллекция элементов управления не может быть изменена во время привязки данных, инициализации, загрузки, предварительной отправки или выгрузки»..

3. Это пользовательский серверный элемент управления или веб-пользовательский элемент управления (ASCX)?

4. @James, это элемент управления веб-пользователя, однако, если есть разница в отношении этого различия, пожалуйста, укажите, спасибо!

Ответ №1:

Это OnInit, и вам нужно сделать это при первой загрузке и при отправке обратно.

Комментарии:

1. Итак, я вызываю процедуру ВСЕГДА OnInit, а также ВСЕГДА при обратной передаче? Или я вызываю его из OnInit и удостоверяюсь, что это либо (а) первая загрузка, либо (б) обратная передача. Не могли бы вы быть немного более конкретным?

2. Если вы введете свой код OnInit , он будет вызываться каждый раз, когда страница публикуется — первая, последняя и каждая обратная передача между ними.

3. @smartcaveman — Создайте свой элемент управления в OnInit и делайте это при каждом вызове, например, не проверяйте обратную передачу.

Ответ №2:

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

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