Жизненный цикл страницы ASP.NET начинается с получения и обработки Web-сервером IIS запроса к данной странице и передачи этого запроса среде выполнения ASP.NET.
В момент получения запроса, среда выполнения:
- загружает класс вызываемой страницы;
- устанавливает свойства класса страницы;
- выстраивает дерево элементов;
- заполняет свойства Request и Response;
- вызывает метод IHttpHandler.ProcessRequest.
После этого среда выполнения проверяет, каким образом была вызвана эта страницы и, если страница вызвана путем передачи данных с другой страницы, о чем будет рассказано далее, то среда выполнения устанавливает свойство PreviousPage.
Стоит отметить также, что помимо рассмотренных ниже этапов выполнения страницы существуют еще и этапы уровня приложения, не специфичные для страницы.
Во время прохождения этапов жизненного цикла возникают события, подписавшись на которые, разработчик может выполнять свой собственный код. Стоит упомянуть атрибут AutoEventWireup, директивы @Page: если этот атрибут установлен в true (значение по умолчанию), то методы класса страницы, названные Page_НазваниеСобытия, автоматически становятся обработчиками соответствующих событий жизненного цикла станицы.
Для того, чтобы проследить жизненный цикл страницы и последовательность возникновения событий, можно установить атрибут Trace директивы @Page в true, а атрибут TraceMode в SortByTime. Тогда в разделе Trace Information можно найти список произошедших событий (колонка Message).
Из всех событий жизненного цикла страницы, разработчик может подписаться только на пять, помимо событий дочерних элементов управления. Эти события: PreInit, Init, Load, PreRender, Unload. Рассмотрим варианты использования этих событий.
Таблица 5.1 – События жизненного цикла страницы
| Событие
| Использование
|
| PreInit
| Во время этого события можно использовать свойство IsPostBack, для того, чтобы определить вызвана ли эта страница в первый раз или в результате постбэка. В плане управления страницей разработчик может:
- создавать динамически элементы управления;
- динамически устанавливать шаблон дизайна или тему оформления;
- считывать или устанавливать свойства объекта Profile.
Стоит особо отметить, что на данном этапе, если страница была вызвана в результате постбэка, свойства элементов управления еще не установлены. В случаи, если разработчик самостоятельно установит свойства на этом этапе, на следующем установленные значения могут быть изменены
|
| Init
| На этом этапе разработчик может считывать или инициализировать свойства элементов управления
|
| Load
| На этом этапе разработчик может считывать или изменять свойства элементов управления
|
| PreRender
| Последняя возможность внести изменения во внешний вид страницы
|
| Unload
| Освобождение занятых ресурсов (закрытие открытых соединений с БД, завершение работы с файлами и т.п.)
Важно, что на этом этапе уже создано HTML представление страницы и попытка внести какие-либо изменения (например, вызвав метод Response.Write()), приведет к исключению
|