Если я не могу использовать OnPreInit в элементах управления, как я могу динамически добавлять свои элементы управления в нужное время? - PullRequest
2 голосов
/ 23 декабря 2009

Я хочу иметь пользовательский элемент управления, который будет динамически добавлять некоторые флажки в панель asp.NET.

Просто я верил, что могу легко сделать это с помощью метода OnPreInit элемента управления. Но дело в том, что я узнал, что не могу использовать и переопределить метод OnPreInit в элементах управления; используется только для страниц.

Я не хочу решать эту проблему со страницы, вызывая метод элемента управления.

Итак, если я не могу использовать PreInit для элементов управления, где находится правильное место для динамического добавления моих флажков?

Я что-то пропустил? Любые советы?

спасибо.

Ответы [ 4 ]

2 голосов
/ 23 декабря 2009

Я думаю, что многое зависит от того, что вы хотите с ними делать - вы должны знать, что добавленные элементы управления динамически получают своего рода жизненный цикл (поиск в Google должен дать вам тонну информации, но, по сути, они "догонят") на каких этапах они пропустили). Я упоминаю об этом только потому, что вы, возможно, захотите разобраться в некоторых подводных камнях - когда я впервые прошел через это, я потратил несколько дней на то, чтобы обдумать это.

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

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
0 голосов
/ 23 декабря 2009

Общее правило - создавать пользовательские элементы управления как можно скорее. Все события для элементов управления будут происходить правильно вплоть до PreRender. Если вы добавляете пользовательские элементы управления в PreRender, они не загружают свое состояние просмотра и не вызывают события.

0 голосов
/ 23 декабря 2009

, если вы пытаетесь использовать значения флажков, попробуйте использовать

 Page.Form.FindControl("ID")
0 голосов
/ 23 декабря 2009

Вы также можете сделать это в событии Page_Load. В чем проблема?

...