
- •6. Разработка на asp.Net. Жизненный цикл страницы, пользовательский интерфейс
- •6.1. Описание .Net Framework
- •6.1.1. Возможности среды clr
- •6.1.2. Библиотека классов платформы .Net Framework
- •6.1.3. Развитие платформы .Net
- •6.1.4. Ключевые термины
- •6.2. Обзор технологии asp.Net
- •6.2.1. Жизненный цикл Веб-страниц asp.Net
- •6.2.1.1. Общие этапы жизненного цикла страницы
- •6.2.1.2. События жизненного цикла
- •6.2.1.3. Дополнительные аспекты жизненного цикла страницы
- •6.2.2. Управление состоянием в asp.Net
- •6.2.3. Состояние просмотра ViewState
- •6.2.3.1. Сохранение объектов в состоянии просмотра
- •6.2.3.2. Оценивание преимуществ использования состояния просмотра
- •6.2.4. Строка запроса
- •6.2.4.1. Использование строки запроса
- •6.2.5. Cookie
- •6.2.6. Использование Session
- •6.2.6.1. Архитектура сеанса
- •6.2.6.2. Использование состояния сеанса
- •6.2.6.3. Поставщики состояния сеанса
- •6.2.6.3.1. Off
- •6.2.6.3.2. InProc
- •6.2.6.3.3. StateServer
- •6.2.6.3.4. SqlServer
- •6.2.7. Ключевые термины
- •6.3. Принципы разработки пользовательского интерфейса Интернет-приложений
- •6.3.1. Работа с текстом
- •6.3.2. Использование элементов CheckBox, CheckBoxList, RadioButton, RadioButtonList и BulletedList
- •6.3.3. Использование Image, ImageButton
- •6.3.4. Использование Literal и HiddenField
- •6.3.5. Использование Panel
- •6.3.7. Использование LinkButton
- •6.3.8. Ключевые термины
- •6.4. Краткие итоги
6.2.1.1. Общие этапы жизненного цикла страницы
В целом страница проходит через этапы, описанные в табл. 6.1. Кроме этапов жизненного цикла страницы существуют этапы приложения, которые выполняются до и перед запросом, но не являются обязательными для страницы.
Таблица 6.1. Этапы жизненного цикла страницы | |
Этап |
Описание |
Запрос страницы |
Запрос страницы происходит перед началом жизненного цикла страницы. При запросе страницы пользователем ASP.NET определяет, нужно ли обрабатывать и компилировать страницу (до начала жизненного цикла страницы), или отправить в ответ на запрос кэшированную версию страницы, не запуская ее обработку. |
Запуск |
На начальном этапе устанавливаются свойства страницы, например Request и Response. На этом этапе страница также определяет, является ли запрос обратной передачей или новым запросом, и устанавливает свойство IsPostBack. Кроме этого, на этом этапе устанавливается свойство страницы UICulture. |
Инициализация страницы |
Во время инициализации страницы элементы управления страницы являются доступными, устанавливаются все свойства элементов управления UniqueID. На странице также применяются темы. Если текущий запрос является обратным запросом, данные обратного запроса не загружены, а значения свойств элементов управления не восстановлены к значениям в состоянии просмотра. |
Загрузка |
Во время загрузки, если текущий запрос является обратным запросом, в свойства элементов управления будут переданы данные, восстановленные из состояния просмотра и состояния управления. |
Проверка |
Во время проверки вызывается метод Validate всех проверяющих элементов управления, который устанавливает свойство IsValid отдельных проверяющих элементов управления и страницы. |
Обработка событий обратного запроса |
Если запрос является обратным, вызывается любой из обработчиков событий. |
Отрисовка |
Перед отрисовкой производится сохранение состояния просмотра страницы и всех элементов управления. На этапе отрисовки страница вызывает метод Render для каждого элемента управления, предоставляя модуль записи текста, который записывает полученные данные в OutputStream свойства страницы Response. |
Выгрузка |
Выгрузка вызывается после завершения отрисовки страницы, отправки клиенту и готовности к удалению. На данном этапе свойства страницы, например Response и Request, выгружаются, производится очистка. |
6.2.1.2. События жизненного цикла
На каждом этапе жизненного цикла страницы она вызывает события, которые могут быть использованы для управления выполнением собственного кода. В случае элементов управления обработчик событий привязывается к событию при помощи атрибутов типа onclick, или в коде.
Страницы также поддерживают автоматическую обработку: ASP.NET производит поиск методов с соответствующими именами и автоматически выполняет эти методы при возникновении определенных событий. Если атрибут AutoEventWireup в директиве @Page установлен в значение true (или не установлен, так как он имеет значение true по умолчанию), события страницы автоматически привязываются к методам, которые используют правила именования Page_event, например Page_Load и Page_Init..
Таблица 6.2 показывает события жизненного цикла страницы, которые используются наиболее часто. Могут существовать и другие события, но они почти не используются в сценариях обработки страниц. Вместо этого они в большинстве случаев используются серверными элементами управления на странице ASP.NET для своей инициализации и отображения.
Таблица 6.2. События жизненного цикла страницы | |
Событие страницы |
Типичные случаи использования |
PreInit |
Событие используется:
|
Init |
Возникает после инициализации всех элементов управления и применения параметров обложки. Это событие используется для чтения или инициализации свойств элемента управления. |
InitComplete |
Вызывается объектом Page. Это событие используется для обработки заданий, требующих завершения всех инициализаций. |
PreLoad |
Это событие используется при необходимости обработки страницы или элемента управления до наступления события Load. После вызова события при помощи Page оно загружает состояние просмотра для себя и всех элементов управления, затем обрабатывает все данные из обратных запросов, включенных в экземпляр Request. |
Load |
Page вызывает метод события OnLoad в Page, затем рекурсивно выполняет это действие для каждого дочернего элемента управления, до выполнения загрузки страницы и всех элементов управления. Метод события OnLoad используется для установки свойств элементов управления и создания подключения к базе данных. |
События элементов управления |
Эти события используются для обработки определенными событиями в элементах управления, например Button события элемента управления Click или TextBox события TextChanged. |
LoadComplete |
Это событие используется для обработки заданий, требующих полной загрузки всех других элементов управления страницы. |
PreRender |
До события:
|
SaveStateComplete |
До этого события ViewState сохраняется для страницы и всех элементов управления. Все изменения на странице или в ее элементах управления на данном этапе будут проигнорированы. Эти задачи используются для сохранения состояния просмотра без внесения изменений в элементы управления. |
Render |
Это не событие; вместо этого на данном этапе обработки объект Page вызывает этот метод для каждого элемента управления. Все серверные Веб-элементы управления ASP.NET обладают методом Render, который записывает разметку элемента управления, отправляемую клиенту. Обычно во время создания пользовательских элементов управления при выводе разметки элемента управления этот метод переопределяется. Однако если пользовательский элемент управления содержит только стандартные серверные элементы управления ASP.NET и не содержат пользовательской разметки, переопределять метод Render не требуется. Пользовательский элемент управления (файл с расширением ASCX) содержит отрисовку по умолчанию, таким образом, нет необходимости отрисовывать элемент управления явным образом. |
Unload |
Это событие происходит для всех элементов управления и затем для страницы. При работе с элементами управления это событие используется для выполнения окончательной очистки определенных элементов управления, например, для закрытия подключений отдельных элементов управления к базам данных. Относительно страницы это событие используется для выполнения окончательных действий, например, для закрытия открытых файлов и подключений к базам данных, а также закрытия пользовательских сеансов или других задач, связанных с запросами. |
Достаточно подробно жизненный цикл страницы и серверных элементов управления, а также порядок обработки событий представлен на рис. 6.3.
Рис. 6.3. Жизненный цикл страницы ASP
Источник: ASP.NET 2.0 Page LifeCycle [13]