Если я не могу использовать OnPreInit в элементах управления, как я могу динамически добавлять свои элементы управления в нужное время?
Я хочу иметь пользовательский элемент управления, который будет динамически добавлять некоторые флажки в панель asp.NET.
Просто я верил, что могу легко сделать это с помощью метода OnPreInit элемента управления. Но дело в том, что я узнал, что не могу использовать и переопределить метод OnPreInit для элементов управления; он используется только для страниц.
Я не хочу решить эту проблему со страницы, вызвав метод элемента управления.
Итак, если я не могу использовать PreInit для элементов управления, где находится правильное место для динамического добавления моих флажков?
Я что-то пропустил? Любые советы?
Благодарю.
4 ответа
Я думаю, что многое зависит от того, что вы хотите с ними делать - вы должны знать, что добавленные элементы управления динамически получают своего рода жизненный цикл (поиск в Google должен дать вам тонну информации, но, по сути, они "догонят" на любых этапах они пропустили). Я упоминаю об этом только потому, что вы, возможно, захотите разобраться в некоторых подводных камнях - когда я впервые прошел через это, я потратил несколько дней, чтобы обдумать это.
Чтобы ответить на ваш вопрос, я бы посоветовал лучше всего добавить флажки во время фазы OnInit элемента управления. Для вашей информации ниже приведен стандартный порядок, при котором события происходят при стандартной загрузке страницы с обычным пользовательским элементом управления, объявленным на странице.
Page: Constructor
Page: OnPreInit
---- Declared Controls Constructed ----
Control: OnInit
Page: OnInit
Page: OnInitComplete
Page: LoadViewState
Control: LoadViewState
Page: OnPreLoad
Page: OnLoad
Control: OnLoad
---- Any Control Events (e.g. btnClick) ----
Page: OnLoadComplete
Page: OnPreRender
Control: OnPreRender
Page: OnPreRenderComplete
Page: SaveViewState
Control: SaveViewState
Page: OnSaveStateComplete
Page: Render
Page: RenderChildren -> Control: Render
Control: OnUnload
Page: OnUnload
Основное правило - создавать пользовательские элементы управления как можно скорее. Все события для элементов управления будут происходить должным образом вплоть до PreRender. Если вы добавляете пользовательские элементы управления в PreRender, они не загружают свое состояние просмотра и не вызывают события.
Вы также можете сделать это в событии Page_Load. В чем проблема в этом?
Если вы пытаетесь использовать значения флажков, попробуйте использовать
Page.Form.FindControl("ID")