Как получить контроль в событии ASP.NET PreInit? - PullRequest
8 голосов
/ 01 июля 2010

Как получить контроль в событии 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 ]

5 голосов
/ 01 июля 2010

PreInit срабатывает до инициализации элементов управления. Прочтите Жизненный цикл страницы ASP.NET для получения более подробной информации.

Инициация
Поднимается после того, как все элементы управления были инициализированы и любой скин Настройки были применены. Инициатива происходит событие индивидуального контроля перед событием Init страницы.

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

1 голос
/ 19 мая 2014

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

1 голос
/ 23 марта 2013

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

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

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

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

0 голосов
/ 03 января 2019

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

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

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

...