|
Обработка страницы
Страница совместно
обрабатывается Web-сервером, средой
выполнения ASP NET и написанным вами кодом.
Класс Page (Страница) содержит ряд событий, с
помощью которых можно управлять обработкой
страницы. При этом также можно использовать
свойства и методы класса Page (Страница). В
данной главе возможности класса Page (Страница)
будут проиллюстрированы на примере
программ Мы рассмотрим лишь некоторые
основные возможности. Для получения
исчерпывающих сведений обратитесь к
описанию каркаса .NET Framework.
События страницы
В процессе стандартной обработки
страницы на сервере происходит ряд событий.
Фактически эти события определены в
базовом классе Control (Элемент управления), и,
таким образом, могут быть вызваны также
элементами управления сервера. Ниже
приведены наиболее значимые события.
- Init (Инициализация). Событие возникает на
первом этапе жизненного цикла страницы,
при ее инициализации Информация о
состоянии элементов управления еще
отсутствует.
- Load (Загрузка) Событие возникает на этапе
загрузки элементов управления в страницу.
На данном этапе уже имеется информация о
состоянии представления этих элементов
управления.
- PreRender (Предвыполнение). Событие
возникает непосредственно перед
воспроизведением (отображением)
элементов управления в выходном потоке.
Как правило, страница это событие не
обрабатывает Тем не менее, оно имеет
важное значения для реализации ваших
собственных элементов управления
сервера.
- Unload (Разгрузка). Событие возникает тогда,
когда элементы управления выгружаются из
страницы Записывать ваши собственные
данные в выходной поток теперь уже поздно.
Свойства страницы
Класс Page (Страница) имеет ряд
важных свойств. Некоторые наиболее
полезные свойства приведены ниже.
- EnableViewState. Указывает, разрешено ли
сохранение состояния представления
самой страницы и ее элементов управления
Можно получить или установить значение
этого свойства. По умолчанию оно
принимает значение true (истина), т.е.
сохранение состояния разрешено
- ErrorPage. Указывает страницу, на которую
будет перенаправлен броузер, если
возникнет непредвиденная исключительная
ситуация.
- IsPostBack. Указывает, загружается страница
впервые или повторно.
- I sValid. Указывает, была ли успешной
проверка правильности страницы
- Request (Запрос). Получает HTTP-объект Request (Запрос),
который предоставляет доступ к данным
входных запросов, поступающих по
протоколу передачи гипертекстовых
файлов HTTP.
- Response (Ответ). Получает HTTP-объект Response (Ответ),
который отсылает запрошенные данные
броузеру.
- Session (Сеанс). Получает текущий объект Session
(Сеанс), в котором ASP.NET хранит состояние
сеанса.
- Trace (Трассировка). Получает объект TraceContext
страницы. В этот объект записывается
трассировочная информация.
Пример программы
Чтобы продемонстрировать
отдельные возможности, которые
используются при обработке страниц, мы
расширим нашу программу Echo (Эхо). Сборка
Hello-Page имеет ряд обработчиков событий
страницы. Для записи простого текста в
выходной поток используется свойство Response (Ответ).
После возникновения каждого события мы
отображаем текущий текст в элементах
управления сервера txtName и IblGreeting. Обработчик
события Load (Загрузка) выводит текущее
значение свойства IsPostBack. Если страница
запрашивается впервые, свойство IsPostBack
имеет значение false (ложь). Если же страница
запрашивается повторно, оно принимает
значение true (истина).
<!-- HelloPage.aspx -->
<-d@ Assembly Name = "HelloPage" %>
<V:P Page Inherits=MyHelloPage %>
<HTML>
< HEAD>
</HEAD>
<BODY>
<!-- ТЕЛО -->
<FORK RUNAT="SERVER">Your name:
<asp:textbox id=txtName Runat="server">
</asp:textbox>
<p><asp: button id=cmdEcho onclick=cmdEcho_Click Text="Echo"
•runat-"server"
tooitip="Click to echo your name">
<!-- подсказка --> </a.-;p : bu11оn></p>
Greeting runat = "server "></asp : label>
</FORMi>
</Body>
< !-- тело -->
</HTML>
В .aspx-файле, который приведен выше,
имеется ссылка на сборку HelloPage. Названная
сборка содержит класс MyHelloPage. В этом файле
также указано, что класс r.vj'.' (Страница)
является производным от класса MyHelloPage. Это
означает, что события данной страницы
обрабатываются методами класса MyHelloPage.
Если страница запрашивается
впервые, текстовые поля и подписи не
содержат никаких значений, поскольку
никакой информации в форму мы еще не
вводили. Свойство IsPostBack имеет значение false (ложь).
Теперь введите имя Robert (Роберт), и щелкните
на кнопке Echo (Эхо). Обработчики событий
страницы выведут следующую информацию:
Page_Init
txtName =
IblGreeting =
Page_Load
IsPostBack = True // Истина
txtName = Robert // Роберт
iblGreeting =
Page_PreRender
txtName = Robert // Роберт
IblGreeting = Hello, Robert. Welcome again
// Привет, Роберт. Добро пожаловать
снова
В функции Page_Init элементы
управления не содержат никаких данных,
поскольку состояние представления на этапе
инициализации страницы не доступно. В
функции Page_Load текстовое поле содержит
данные. Надпись не содержит никаких данных,
так как обработчик события (щелчка мыши) еще
не вызван. Свойство IsPostBack теперь имеет
значение true (истина). В функции Page_PreRender оба
элемента управления содержат данные.
Щелкните на кнопке Echo (Эхо) еще раз.
Данные в элементах управления функции Page_Init
опять отсутствуют. А вот в функции Page_Load оба
элемента управления используют данные
состояния представления. На рис. 10.9
представлено окно броузера, в котором
отображено то, что после второго щелчка на
кнопке Echo (Эхо) вывели обработчики события
страницы.

Рис. 10.9. Вывод броузера после второго щелчка
на кнопке Echo (Эхо)
Директива Page (Страница) и
директива Assembly (Сборка)
Файл с расширением . aspx может
содержать директиву Assembly (Сборка) и
директиву Page (Страница). Директива Assembly (Сборка)
связывает уже существующую
скомпилированную сборку с текущей
страницей. Директива Page (Страница)
определяет различные атрибуты, которые
управляют обработкой ASP.NET-страницы. Каждая
директива содержит одну или несколько пар
атрибут/значение. Синтаксис директивы Assembly
(Сборка) и директивы Page (Страница) приведен
ниже.
<@ Assembly Name="HelloCodebehind" @>
<@ Page Inherits=MyWebPage @>
Программа HelloCodebehind.aspx служит
примером .aspx-страницы, в которой
отсутствует код сценария. Если
использовать другие языки
программирования, например, С# или VB.NET,
сценарий можно вложить непосредственно в .
aspx-файл. В таком случае использовать
директиву Assembly (Сборка) нет необходимости.
Указанные языки программирования также
позволяют использовать файлы с фоновым
исходным кодом. Для этого в директиве Page (Страница)
используется атрибут Src, который указывает
на нескомпилированный исходный файл. Язык C++
такие возможности не поддерживает. Если
используется язык C++, директива Assembly (Сборка)
должна содержать атрибут Name (Имя), который
идентифицирует скомпилированную сборку.
При помощи атрибута Inherits (Наследуется)
указывается класс, производный от класса Page
(Страница), производным от которого в свою
очередь является класс данной . aspx-страницы.
|