ASP.NET: События жизненного цикла страницы
ASP.NET programming gist russian
Эта статья является продолжением статьи "ASP.NET: Этапы жизненного цикла страницы". Сейчас я хочу более подробно рассказать о событийной модели в ASP.NET. Во время прохождения этапов жизненного цикла возникают события, подписавшись на которые, разработчик может выполнять свой собственный код. Зачастую, многие начинающие разработчики, путают порядок событий в ASP.NET приложении. Проверить trace загрузки страницы достаточно просто:
- Создадим простое
ASP.NET Web Forms Applicationв студии - Добавим атрибуты
TraceиTraceModeдирективы@Pageи устанавливаем значения 'true' и 'SortByName' соответственно.

- Запускаем наш сайт (нажимаем F5 в студии)
- Прямо в окне браузера вместе с сайтом загрузилась информации трассировки.

Во время трассировки не выводится событие Unload, потому что оно происходит, когда весь код уже отработал. Из всех событий жизненного цикла страницы, разработчик может подписаться только на пять, помимо событий дочерних элементов управления. Эти события:
PreInitInitLoadPreRenderUnload
Во время любого события можно использовать свойство IsPostBack, для того, чтобы определить вызвана ли эта страница в первый раз или в результате postback. Рассмотрим варианты использования этих событий.
| Событие | Использование |
|---|---|
| PreInit | На данном этапе элементы управления еще не созданы и равны
null
. Здесь разработчик может создать динамически элементы управления, динамически устанавливать шаблон дизайна или тему оформления, считывать или устанавливать свойства объекта
Profile
. |
| Init | Здесь происходит начальная инициализация контролов, значения берутся из aspx файла.
Tracking ViewState
еще отключен. В случае, если разработчик самостоятельно установит свойства на этом этапе, то на следующем установленные значения могут быть изменены. На этом этапе разработчик может считывать или инициализировать свойства элементов управления. |
| Load | Загружаются данные из ресурсов. Если произошел Postback, элементы управления получают значения, которые были отправлены с формы. На этом этапе разработчик может считывать или изменять свойства элементов управления. |
| PreRender | Последняя возможность внести изменения во внешний вид страницы. |
| Unload | Освобождение занятых ресурсов (закрытие открытых соединений с базой данных, завершение работы с файлами и т.п.) Важно, что на этом этапе уже создано HTML представление страницы и попытка внести какие-либо изменения (например, вызвав метод
Response.Write()
), приведет к исключению. Если на данном этапе изменить знамения элементов управления, они не попадут конечному пользователю. |
Пример
Результат работы скрипта приведен в таблице:
| Событие | IsPostBack | |||||||
|---|---|---|---|---|---|---|---|---|
| До | После | |||||||
| Tracking ViewState | TextBox (на момент входа в функцию) | TextBox (на момент выхода из функции) | Response.Write | Tracking ViewState | TextBox (на момент входа в функцию) | TextBox (на момент выхода из функции) | Response.Write | |
| OnPreInit | False | null | null | OnPreInit | False | null | null | OnPreInit |
| OnInit | False | Sample text | Sample text OnInit | OnInit | False | Sample text | Sample text OnInit | OnInit |
| OnPreLoad | True | Sample text OnInit | Sample text OnInit OnPreLoad | OnPreLoad | True | Sample text OnInit OnPreLoad OnPreRender | Sample text OnInit OnPreLoad OnPreRender OnPreLoad | OnPreLoad |
| OnPreRender | True | Sample text OnInit OnPreLoad | Sample text OnInit OnPreLoad OnPreRender | OnPreRender | True | Sample text OnInit OnPreLoad OnPreRender OnPreLoad | Sample text OnInit OnPreLoad OnPreRender OnPreLoad OnPreRender | OnPreRender |
| OnUnload | True | Sample text OnInit OnPreLoad OnPreRender | Sample text OnInit OnPreLoad OnPreRender OnUnload | Error | True | Sample text OnInit OnPreLoad OnPreRender OnPreLoad OnPreRender | Sample text OnInit OnPreLoad OnPreRender OnPreLoad OnPreRender OnUnload | Error |