Как получить контроль в событии ASP.NET PreInit?

Как получить контроль в событии ASP.NET PreInit? Указатели имеют значение null, а метод FindControl возвращает значение null.

Я использую мастер и контент-страницы. Разметка страницы содержимого выглядит следующим образом:

<asp:Content ID="Content2" ContentPlaceHolderID="ContentBody" runat="server">
   <asp:Table ID="Table1" runat="server" Width="100%">
      .....
   </asp:Table>
</asp:Content>

И код так:

private void Page_PreInit(object sender, EventArgs e)
{
    Control table = this.FindControl("Table1");
    //table is null here
}

Таким образом, таблица по-прежнему пуста после этого.FindControl("Table1"). NamingContainer этой страницы также имеет значение null. Что я делаю неправильно?

ОБНОВЛЕНИЕ Я должен использовать это событие для создания элементов управления. Как сказано в Обзоре жизненного цикла страницы ASP.NET, это событие следует использовать для создания динамического элемента управления. Мне нужно создать список ссылок в моей таблице. Может быть, есть другой способ сделать это?

4 ответа

PreInit запускается до инициализации элементов управления. Читайте на странице ASP.NET Life Cycle для более подробной информации.

В этом
Поднимается после инициализации всех элементов управления и применения любых настроек скина. Событие Init отдельных элементов управления происходит до события Init страницы.

Используйте это событие для чтения или инициализации свойств элемента управления.

Существует разница между страницами с мастер-страницей или без нее, как объяснено ЗДЕСЬ в вопросе и ответах.

Без мастер-страницы вы можете создавать элементы управления в событии PreInit и добавлять их в существующий элемент управления, но с помощью мастер-страницы вы еще не можете получить доступ к существующим элементам управления, как объяснено в ответах здесь, поэтому вам придется создавать динамические элементы управления в более позднем событии. как событие Init.

Поскольку вы используете мастер-страницу, вы должны создать свои динамические элементы управления в более позднем событии, таком как событие Init, или попробовать опцию, предоставленную Valio.

Событие PreInit страницы запускается до инициализации элементов управления, поэтому элементы управления еще не существуют. Вам потребуется доступ к элементу управления в более позднем событии, например в событии "Загрузка страницы". Пожалуйста, смотрите http://msdn.microsoft.com/en-us/library/ms178472.aspx.

В событии PreInit () стандартные (определенные) элементы управления еще не созданы на этом этапе, поэтому вы не можете получить никакой ссылки на какие-либо элементы управления.

Используйте событие Page_Load() для создания динамических элементов управления. Во время этого события вы можете добавить любые динамические элементы управления в существующие элементы управления.

После создания динамических элементов управления в Page_Load() используйте PreRender() для внесения любых изменений / обновлений.

Лично я использую PreInit для определения объектов шириной страницы (т. Е. Соединений с базой данных, объектов пользовательского сеанса), а также где я выполняю проверки аутентификации безопасности (и перенаправляет, если не авторизован).

Другие вопросы по тегам