Могут ли Asp.Net UserControls знать, добавляются ли они «поздно» в иерархию элементов управления?

StackOverflow https://stackoverflow.com/questions/1423021

Вопрос

У меня есть пользовательский элемент управления, который использует стандартную парадигму if (! IsPostBack) {// initializeself} , чтобы избежать повторной инициализации во время обратных передач (поэтому, торгуя меньшим количеством обращений к БД для увеличения использования ViewState ). Такой подход в большинстве случаев хорошо мне подходит, но есть одно место, где я хочу добавить этот элемент управления в иерархию элементов управления «поздно» во время обратной передачи.

Это, конечно же, приводит к сбою логики инициализации и отображению элемента управления в неинициализированном состоянии.

Какую защиту я должен использовать, чтобы определить, следует ли мне инициализировать, поскольку ! IsPostBack не обрезает его? Я мог бы установить флаг во время LoadViewState , но это кажется немного хакерским. Что я хотел бы найти, так это какое-то условие, которое возникает только тогда, когда элемент управления впервые добавляется в иерархию элементов управления, и ключ к нему. Существует ли такое условие?

[править] Пример псевдокода следует для содержащей страницы:

protected void Page_Prerender(object sender, EventArgs e)
{
    Controls.Add(LoadControl("some_control.ascx"));
}

Есть ли способ для some_control узнать, что он был добавлен поздно?

Это было полезно?

Решение 4

Дальнейшие поиски не привели меня к общему решению этой проблемы. В итоге я установил флаг в Page_LoadViewState , который подавил инициализацию элемента управления - фактически то же самое, что защита инициализации с помощью ! IsPostBack , но немного более точно.

Другие советы

Разве вы не можете использовать конструктор для инициализации дочерних элементов управления? (или создайте метод Initialize) Затем вы контролируете, когда элемент управления инициализируется.

Может быть, это поможет вам понять вашу проблему: & # 8220; & # 8230; что если элемент управления создается в обработчике событий и динамически добавляется в дерево элементов управления? В этом случае управление играет в догонялки. Как только он добавляется в дерево управления, он начинает выполнять свои фазы, пока не достигнет текущей фазы страницы & # 8230; & # 8221;

Больше информации здесь:

http://weblogs.asp.net/vga /archive/2003/08/11/23498.aspx

На самом деле нет концепции добавления элемента управления для " first " время, потому что помните, что каждый раз, когда вы запрашиваете страницу, создается новый объект страницы со всеми новыми экземплярами элемента управления. Ранее созданные контрольные экземпляры не добавляются в новый объект страницы.

Почему логика инициализации не работает? Возможно, если бы вы опубликовали этот код, мы могли бы что-то предложить - не похоже, что так должно быть.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top