Страница совместно обрабатывается Web-сервером, средой выполнения ASP NET и написанным вами кодом. Класс Page (Страница) содержит ряд событий, с помощью которых можно управлять обработкой страницы. При этом также можно использовать свойства и методы класса Page (Страница). В данной главе возможности класса Page (Страница) будут проиллюстрированы на примере программ Мы рассмотрим лишь некоторые основные возможности. Для получения исчерпывающих сведений обратитесь к описанию каркаса .NET Framework.
События страницы
В процессе стандартной обработки страницы на сервере происходит ряд событий. Фактически эти события определены в базовом классе Control (Элемент управления), и, таким образом, могут быть вызваны также элементами управления сервера. Ниже приведены наиболее значимые события.
Свойства страницы
Класс Page (Страница) имеет ряд важных свойств. Некоторые наиболее полезные свойства приведены ниже.
Пример программы
Чтобы продемонстрировать отдельные возможности, которые используются при обработке страниц, мы расширим нашу программу 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 (Эхо) вывели обработчики события страницы.
Директива 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-страницы.