#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
метод обычно используется для рендеринга в пользовательских элементах управления сервера.