Поделиться через


Общие сведения о жизненном цикле веб-страниц ASP.NET

Обновлен: Ноябрь 2007

При выполнении страницы ASP.NET осуществляется ее жизненный цикл, во время которого исполняется ряд шагов обработки. В частности: инициализация, определение элементов управления, восстановление и поддержание рабочего состояния, выполнение кода обработчика событий, а также отрисовка. Важно ознакомиться с жизненным циклом страницы, чтобы иметь возможность записывать код в нужный шаг жизненного цикла с нужным результатом. Кроме этого, при создании собственных элементов управления необходимо ознакомиться с жизненным циклом страницы, чтобы гарантировать правильную инициализацию элементов управления, сбор свойств элементов управления и текущих данных состояния, а также запуска любого управляющего кода. (Жизненный цикл элемента управления базируется на жизненном цикле страницы, но страница передает в элемент управления больше событий, чем доступно для страницы ASP.NET по отдельности.)

Общие этапы жизненного цикла страницы

В целом страница проходит через этапы, описанные в приведенной таблице. Кроме этапов жизненного цикла страницы существуют этапы приложения, которые выполняются до и перед запросом, но не являются обязательными для страницы. Дополнительные сведения см. в разделе Общие сведения о жизненном цикле приложения ASP.NET для IIS 5.0 и 6.0.

Этап

Описание

Запрос страницы

Запрос страницы происходит перед началом жизненного цикла страницы. При запросе страницы пользователем ASP.NET определяет, нужно ли обрабатывать и компилировать страницу (до начала жизненного цикла страницы), или отправить в ответ на запрос кэшированную версию страницы, не запуская ее обработку.

Запуск

На начальном этапе устанавливаются свойства страницы, например Request и Response. На этом этапе страница также определяет, является ли запрос обратной передачей или новым запросом, и устанавливает свойство IsPostBack. Кроме этого, на этом этапе устанавливается свойство страницы UICulture.

Инициализация страницы

Во время инициализации страницы элементы управления страницы являются доступными, устанавливаются все свойства элементов управления UniqueID. На странице также применяются темы. Если текущий запрос является обратным запросом, данные обратного запроса не загружены, а значения свойств элементов управления не восстановлены к значениям в состоянии просмотра.

Загрузка

Во время загрузки, если текущий запрос является обратным запросом, в свойства элементов управления будут переданы данные, восстановленные из состояния просмотра и состояния управления.

Проверка

Во время проверки вызывается метод Validate всех проверяющих элементов управления, который устанавливает свойство IsValid отдельных проверяющих элементов управления и страницы.

Обработка событий обратного запроса

Если запрос является обратным, вызывается любой из обработчиков событий.

Отрисовка

Перед отрисовкой производится сохранение состояния просмотра страницы и всех элементов управления. На этапе отрисовки страница вызывает метод Render для каждого элемента управления, предоставляя модуль записи текста, который записывает полученные данные в OutputStream свойства страницы Response.

Выгрузка

Выгрузка вызывается после завершения отрисовки страницы, отправки клиенту и готовности к удалению. На данном этапе свойства страницы, например Response и Request, выгружаются, производится очистка.

События жизненного цикла

На каждом этапе жизненного цикла страницы она вызывает события, которые могут быть использованы для управления выполнением собственного кода. В случае элементов управления обработчик событий привязывается к событию при помощи атрибутов типа onclick, или в коде.

Страницы также поддерживают автоматическую обработку: ASP.NET производит поиск методов с соответствующими именами и автоматически выполняет эти методы при возникновении определенных событий. Если атрибут AutoEventWireup в директиве @ Page установлен в значение true (или не установлен, так как он имеет значение true по умолчанию), события страницы автоматически привязываются к методам, которые используют правила именования Page_event, например Page_Load и Page_Init. Дополнительные сведения по автоматической обработке событий см. в разделе Модель событий серверного веб-элемента управления ASP.NET.

Следующая таблица показывает события жизненного цикла страницы, которые используются наиболее часто. Могут существовать и другие события, но они почти не используются в сценариях обработки страниц. Вместо этого они в большинстве случаев используются серверными элементами управления на странице ASP.NET для своей инициализации и отображения. Если требуется написать собственные серверные элементы управления ASP.NET, необходимо получить дополнительную информацию об этих этапах. Сведения о создании пользовательских элементов управления см. в разделе Разработка пользовательских серверных элементов управления ASP.NET.

Событие страницы

Типичные случаи использования

PreInit

Событие используется:

  • С помощью свойства IsPostBack нужно проверить, обрабатывается ли страница в первый раз.

  • Создание или повторное создание динамических элементов управления.

  • Укажите главную страницу динамически.

  • Установите свойство Theme динамически.

  • Прочтите или установите значения свойств.

    ms178472.alert_note(ru-ru,VS.90).gifПримечание.
    Если запрос является обратным, значения элементов управления не восстановлены из состояния просмотра. Если на этом этапе устанавливается свойство элемента управления, его значение будет перезаписано следующим событием.

Init

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

InitComplete

Вызывается объектом Page. Это событие используется для обработки заданий, требующих завершения всех инициализаций.

PreLoad

Это событие используется при необходимости обработки страницы или элемента управления до наступления события Load.

После вызова события при помощи Page оно загружает состояние просмотра для себя и всех элементов управления, затем обрабатывает все данные из обратных запросов, включенных в экземпляр Request.

Load

Page вызывает метод события OnLoad в Page, затем рекурсивно выполняет это действие для каждого дочернего элемента управления, до выполнения загрузки страницы и всех элементов управления.

Метод события OnLoad используется для установки свойств элементов управления и создания подключения к базе данных.

События элементов управления

Эти события используются для обработки определенными событиями в элементах управления, например Button события элемента управления Click или TextBox события TextChanged.

ms178472.alert_note(ru-ru,VS.90).gifПримечание.
При обратном запросе, если страница содержит проверяющие элементы управления, проверьте свойство IsValid метода Page и отдельных проверочных элементов управления до выполнения обработки.

LoadComplete

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

PreRender

До события:

  • Объект Page вызывает EnsureChildControls для каждого элемента управления и для страницы.

  • Каждый связанный элемент управления, свойство которого DataSourceID установлено, вызывает свой метод DataBind. Дополнительные сведения см. в разделе Связанные события в связанных элементах управления.

Событие PreRender происходит для каждого элемента управления на странице. Это событие используется для внесения окончательных изменений на странице или в ее элементах управления.

SaveStateComplete

До этого события ViewState сохраняется для страницы и всех элементов управления. Все изменения на странице или в ее элементах управления на данном этапе будут проигнорированы.

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

Render

Это не событие; вместо этого на данном этапе обработки объект Page вызывает этот метод для каждого элемента управления. Все серверные веб-элементы управления ASP.NET обладают методом Render, который записывает разметку элемента управления, отправленную в обозреватель.

Обычно во время создания пользовательских элементов управления при выводе разметки элемента управления этот метод переопределяется. Однако если пользовательский элемент управления содержит только стандартные серверные элементы управления ASP.NET и не содержат пользовательской разметки, переопределять метод Render не требуется. Дополнительные сведения см. в разделе Разработка пользовательских серверных элементов управления ASP.NET.

Пользовательский элемент управления (файл с расширением ASCX) содержит отрисовку по умолчанию, таким образом, нет необходимости отрисовывать элемент управления явным образом.

Unload

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

Относительно страницы это событие используется для выполнения окончательных действий, например для закрытия открытых файлов и подключений к базам данных, а также закрытия пользовательских сеансов или других задач, связанных с запросами.

ms178472.alert_note(ru-ru,VS.90).gifПримечание.
На этапе выгрузки страница и элементы управления в ней отрисовываются, поэтому внесение изменений в поток ответа не допускается. При попытке вызова метода Response.Write или подобных ему возникает исключение.

Дополнительные аспекты жизненного цикла страницы

Отдельные серверные элементы управления ASP.NET обладают собственным жизненным циклом, сходным с жизненным циклом страницы. Например, события Init и Load происходят во время соответствующих событий страницы.

Хотя Init и Load рекурсивно происходят с каждым элементом, они выполняются в обратном порядке. Событие Init (а также Unload) для каждого дочернего элемента происходят до возникновения соответствующего события в его контейнере (снизу вверх). Однако событие Load в контейнере происходит до событий Load в дочерних элементах управления (сверху вниз).

Можно настроить порядок появления содержимого элемента управления обработкой событий элемента, например события Click в элементе управления Button и события SelectedIndexChanged в элементе управления ListBox. В некоторых условиях необходимо также обработать событие DataBinding или DataBound. Дополнительные сведения см. в разделах об отдельных элементах управления и Разработка пользовательских серверных элементов управления ASP.NET.

При наследовании класса из класса Page кроме обработки событий страницы можно также переопределять методы базовых классов страницы. Например, при переопределении метода страницы InitializeCulture для динамической установки языка и региональных параметров. Обратите внимание, что при создании обработчика событий с использованием синтаксиса Page_event базовая реализация вызывается явным образом и поэтому не требует вызова в методе. Например, метод базового класса страницы OnLoad вызывается вне зависимости от создания метода Page_Load. Однако при переопределении метода OnLoad с применением ключевого слова override (Overrides в Visual Basic) необходимо вызвать базовый метод явным образом. Например, при переопределении метода страницы OnLoad необходимо вызвать base.Load (MyBase.Load в Visual Basic) для запуска базовой реализации.

Обработка событий в добавленных элементах управления

Если элементы управления создаются динамически во время выполнения или создаются декларативно при помощи шаблонов с привязкой к данным, события в них изначально не синхронизированы с событиями в элементах управления на странице. Например, если элемент управления добавлен во время управления, события Init и Load могут происходить в жизненном цикле страницы намного позже, чем события в элементах управления, созданные декларативно. Таким образом, со времени их создания динамически созданные элементы управления и элементы управления в шаблонах вызывают события после других событий до прерывания их другими событиями, во время которых они были добавлены в коллекцию Controls.

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

Например, GridView показывает запись о компании в каждой строчке вместе с списком служащих компании в элементе управления ListBox. Чтобы заполнить список служащих, нужно привязать элемент управления ListBox к элементу управления источником данных (например SqlDataSource), который доставляет данные о служащих компании при помощи запроса CompanyID.

Если свойства привязки к данным ListBox, например DataSourceID и DataMember, установлены декларативно, элемент управления ListBox попытается привязать к источнику данных во время события в строке DataBinding. Однако поле в строке CompanyIDне содержит значения, пока не будет значения GridView в событии элемента управления RowDataBound. В таком случае дочерний элемент управления (элемент ListBox привязывается перед контейнерным элементом (элемент GridView, привязанным к данным, поэтому этапы привязки происходят независимо.

Чтобы избежать подобных ситуаций, следует располагать элемент управления источником данных для элемента ListBox в том же шаблоне, что и сам элемент управления ListBox и не устанавливать свойства привязки данныхListBox декларативно. Вместо этого следует устанавливать их программно во время выполнения события RowDataBound, таким образом, элемент управления ListBox не будет привязан к данным до момента, когда будут доступны данные в поле CompanyID.

Дополнительные сведения см. в разделе Привязка к данным с помощью элемента управления источника данных.

События привязки данных в элементах управления

Для объяснения связи между жизненным циклом страницы и событиями привязки данных в таблице приведены события в элементах управления с привязкой к данным, например элементах управления GridView, DetailsView, и FormView.

Событие в элементе управления

Типичные случаи использования

DataBinding

Это событие вызывается элементами управления с привязкой к данным перед событием PreRender контейнерного элемента управления (или объекта Page) и означает начало привязки элемента управления к данным.

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

RowCreated (только GridView) или ItemCreated (DataList, DetailsView, SiteMapPath, DataGrid, FormView, Repeater и ListView)

Это событие используется для управления содержимым, которое не зависит от привязки к данным. Например, во время выполнения можно программно добавлять форматирование верхнего или нижнего колонтитула в элементе управления GridView.

RowDataBound (только GridView) или ItemDataBound (DataList, SiteMapPath, DataGrid, Repeater и ListView)

При возникновении этого события доступны данные в строке или элементе, поэтому доступно форматирование данных или установка свойства FilterExpression дочерних элементов управления источниками данных, что позволяет показывать связанные данные в строке или элементе.

DataBound

Это событие обозначает конец операций привязки данных в элементе управления. В элементе управления GridView привязка данных закончена во всех строках и всех дочерних элементах управления.

Это событие используется для форматирования привязанных данных или для запуска привязки в других элементах управления, которые зависят от данных из текущего элемента управления. (Дополнительные сведения см. в разделе «Обработка событий в добавленных элементах управления».)

События элемента управления Login

Элемент управления Login может использовать параметры из файла Web.config для автоматического управления проверкой подлинности. Однако если в приложении нужно настроить отдельный элемент управления, или если нужно четкое понимание связи элемента управления Login с жизненным циклом страницы, можно использовать события, указанные в таблице.

Событие в элементе управления

Типичные случаи использования

LoggingIn

Это событие возникает во время обратного запроса, после события LoadComplete. Оно обозначает начало процесса входа в систему.

Это событие используется для задач, предшествующих началу процесса проверки подлинности.

Authenticate

Это событие происходит после события LoggingIn.

Событие используется для переопределения или изменения стандартной проверки подлинности в элементе управления Login.

LoggedIn

Событие происходит после проверки подлинности имени пользователя и пароля.

Это событие используется для перенаправления на другую страницу или динамической установки текста в элементе управления. Событие не происходит при ошибке или сбое проверки подлинности.

LoginError

Событие возникает при неудачной проверке подлинности.

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

См. также

Основные понятия

Модель событий серверного веб-элемента управления ASP.NET

Контекст страницы и приложения в веб-приложениях ASP.NET

Общие сведения о состоянии представления ASP.NET

Привязка к данным с помощью элемента управления источника данных

Ссылки

Проверка сведений, вводимых пользователем на веб-страницах ASP.NET

Общие сведения об элементах управления входом ASP.NET

Другие ресурсы

Разработка пользовательских серверных элементов управления ASP.NET

Синтаксис страницы ASP.NET

Обработка событий сервера на страницах ASP.NET