У меня есть пользовательский элемент управления, который использует стандартную парадигму if(!IsPostBack){//initialize myself}
, чтобы избежать повторной инициализации во время postbacks (так что торговля меньшим количеством ударов БД для увеличения использования ViewState). Этот подход мне очень помогает, но есть одно место, где я хочу добавить этот элемент управления в иерархию управления «поздно» во время обратной передачи.Может ли Asp.Net UserControls знать, добавляются ли они «поздно» в иерархию управления?
Это, конечно же, приводит к сбою логики инициализации, а элемент управления должен отображаться в неинициализированном состоянии.
Какую охрану я должен использовать, чтобы определить, следует ли инициализировать, поскольку !IsPostBack
не разрезает ее? Я могу установить флаг во время LoadViewState
, но это кажется немного хакерским. То, что я хотел бы найти, - это некоторое условие, которое происходит только тогда, когда элемент управления сначала добавляется в иерархию элементов управления, а также ключ к этому. Существует ли такое условие?
[править] Пример псевдокод следует за содержащую страницу:
protected void Page_Prerender(object sender, EventArgs e)
{
Controls.Add(LoadControl("some_control.ascx"));
}
Есть ли способ для some_control
знать, что это было добавлено поздно?
Эта статья в блоге фактически немного искажает ситуацию; контроль не играет догоняющего, он насильно улавливается - и то, что мне нужно, - это механизм, чтобы выяснить, когда я в этом состоянии. –
Возможно, что-то подобное вам поможет: protected void Page_Prerender (отправитель объекта, EventArgs e) { MyControl control = LoadControl («MyControl») как MyControl; control.MustInitialize = true; Controls.Add (управление); } –
Закончено решение этой проблемы почти таким образом, но без необходимости определять публичный MustInitialize. Благодаря! –