Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции OOP c#.doc
Скачиваний:
44
Добавлен:
22.09.2019
Размер:
3.38 Mб
Скачать

5.4. Класс System.Web.Ui.Page. События страницы

Любая aspx-страница компилируется в объект определенного класса. Этот класс является прямым или косвенным (если используется концепция Code Behind) наследником класса System.Web.UI.Page.

Рассмотрим класс System.Web.UI.Page подробнее. Свойства данного класса описаны в следующей таблице 38.

Таблица 38

Свойства класса System.Web.UI.Page

Имя свойства

Описание

Application

Объект класса HttpApplicationState, описывающий web-приложение, к которому относится страница. Для отдельного web-приложения существует ровно один объект Application, который используется всеми клиентами

Cache

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

ClientTarget

Свойство позволяет переопределить встроенное в ASP.NET распознавание браузера и задать тот конкретный браузер (в виде строки-описания), которому предназначена страница. Любые элементы управления, которые зависят от браузера, будут использовать запись в свойстве ClientTarget

EnableViewState

Булево значение, управляющее поддержкой View State для страницы. Значение свойства влияет на все элементы управления страницы. По умолчанию – значение true

ErrorPage

URL страницы, которая показывается, если при компиляции или выполнении страницы произошло необработанное исключение или ошибка

IsPostBack

Это булево свойство устанавливается в true, если страница выполняется в цикле обмена с клиентом. Ложное значение свойства указывает на то, что страница отображается первый раз, и для серверных элементов управления не сохранено View State. В этом случае нужно установить состояние элементов вручную – обычно в обработчике события Page_Load

IsValid

Булево свойство; устанавливается в true, если проверочные элементы управления на странице сообщают, что условия проверки выполнены с положительным результатом. Если хотя бы одно условие проверки не выполнено, значение свойства – false

Request

Ссылка на объект HttpRequest, обеспечивающий доступ к информации о HTTP-запросе

Response

Ссылка на объект HttpResponse, обеспечивающий доступ к информации о HTTP-ответе

Server

Объект класса HttpServerUtility, описывающий параметры web-сервера

Session

Ссылка на объект класса HttpSessionState, хранящий данные текущей сессии пользователя в web-приложении

SmartNavigation

Булево свойство, разрешающее поддержку Smart Navigation

Trace

Объект класса TraceContext. Если на странице разрешена трассировка, то можно пользоваться данным свойством для записи особой информации в журнал трассировки

TraceEnabled

Булево свойство, разрешающее поддержку трассировки

User

Ссылка на объект, реализующий интерфейс IPrincipal и описывающий пользователя. Свойство используется при проведении аутентификации

Validators

Коллекция проверочных элементов, размещенных на странице

Легко заметить, что некоторым из свойств страницы (ClientTarget, EnableViewState, ErrorPage, SmartNavigation, TraceEnabled) соответствуют атрибуты директивы @Page.

Свойство Trace удобно при отладке. Тип свойства – класс TraceContext. При помощи перегруженных методов Write() и Warn() данного класса в отладочную информацию страницы можно записать свою информацию. Булевское свойство TraceContext.IsEnabled позволяет включить или отключить трассировку, а свойство TraceContext.TraceMode управляет порядком сортировки отладочной информации (по категориям или по времени).

Рассмотрим пример страницы test.aspx:

<%@ Page Language="C#" Trace="true" %>

<script runat="server">

void Page_Load(object sender, EventArgs e) {

Trace.Write("Usual Message");

Trace.Warn("My Category", "Warn Message - draw in red");

}

</script>

<html>

<body>

Some Text

</body>

</html>

На странице при помощи директивы @Page включена трассировка, а в обработчике события загрузки страницы Page_Load() выводится два отладочных сообщения.

Рис. 14. Страница с отладочной информацией

Работу со свойствами Application, Cache, IsValid, Request, Response, Session, User, Validators рассмотрим более подробно позднее.

Основные методы класса System.Web.UI.Page перечислены в таблице 39.

Таблица 39

Методы класса System.Web.UI.Page

Имя метода

Описание

DataBind()

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

FindControl()

Метод позволяет найти некий элемент управления на странице

LoadControl()

Динамическая загрузка элемента управления из файла .ascx

LoadTemplate()

Метод выполняет динамическую загрузку шаблона

MapPath()

Метод строит физический путь для указанного элемента приложения

ResolveUrl()

Преобразует виртуальный URL в абсолютный URL

Validate()

Дает команду всем проверочным элементам на странице выполнить проверку

Использование методов MapPath() и ResolveUrl() демонстрирует следующая простая страница:

<%@ Page Language="C#" %>

<script runat="server">

void Page_Load(object sender, EventArgs e) {

Label1.Text = this.MapPath("test");

Label1.Text += this.ResolveUrl("test2.aspx");

}

</script>

<html>

<body>

<asp:Label ID="Label1" runat="server" />

</body>

</html>

Вид страницы в браузере показан на рисунке 15.

Рис. 15. Страница в браузере

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

Набор и последовательность событий страницы зависят от следующего фактора: показывается ли страница первый раз или страница отображается в цикле обмена с клиентом1. Если страница отображается в первый раз, то происходят такие события (в описанной последовательности):

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

  2. Load. Установлены заданные в описании страницы свойства управляющих элементов. Как правило, в обработчике события Load помещается код, который выполняет дополнительную настройку свойств элементов – например, читает некоторые свойства из базы данных. Для того чтобы дополнительная настройка проходила только один раз, обычно проверяют значение свойства IsPostBack (if(!IsPostBack) ...).

  3. PreRender. Каждый элемент управления готов к выводу.

  4. SaveVeiwState. Информация о состоянии элементов управления сериализуется в закодированную строку и передается клиенту.

  5. Render. Событие происходит перед выводом страницы клиенту.

  6. Dispose. Страница и ее элементы управления освобождаются из памяти.

Если страница отображается не в первый раз, а в цикле обмена с клиентом, то дополнительно происходят следующие события:

  1. Init.

  2. LoadViewState. Информация о состоянии загружена в соответствующие свойства управляющих элементов.

  3. Load.

  4. RaisePostDataChanged. В управляющее элементы была помещена информация, которая передана методом POST протокола HTTP.

  5. RaisePostBackEvent. Обрабатываются события, которые привели к отправке информации на сервер (такие, как нажатие кнопки).

  6. PreRender.

  7. SaveVeiwState.

  8. Render.

  9. Dispose.

Класс System.Web.UI.Page позволяет программисту задать обработчики следующих событий: Init, Load, Unload (вся информация страницы послана клиенту), PreRender, Error (на странице возникло необработанное исключение). При этом назначение обработчиков может быть выполнено двумя способами. В режиме автоматического связывания (директива @Page, атрибут AutoEventWireup="true") для назначения обработчика достаточно в блоке серверного кода записать метод со специальным именем в формате Page_<имя события>. Если режим автоматического связывания выключен, то методы обработки связываются с событиями в коде инициализации (конструкторе) с использованием соответствующих делегатов.

Рассмотрим пример страницы с обработчиками. Для простоты кода воспользуемся автоматическим связыванием. Разметим на странице поле ввода и кнопку и реализуем некоторые обработчики:

<%@ Page Language="C#" %>

<script runat="server">

void Page_Init(object sender, EventArgs e) {

TextBox1.Text = "Init...";

}

void Page_Load(object sender, EventArgs e) {

if (!IsPostBack) Response.Write("First Load");

else Response.Write("Second Load or more...");

}

</script>

<html>

<body>

<form id="Form1" runat="server">

<asp:TextBox ID="TextBox1" runat="server" />

<asp:Button ID="But1" runat="server" Text="Button" />

</form>

</body>

</html>

Страница после первой загрузки показана на рисунке 16.

Рис. 16. Страница с обработчиками событий в браузере