- •1. Язык программирования c# 3
- •2. Базовые элементы .Net Framework 67
- •3. ТЕхнология .Net Remoting 144
- •Введение
- •1. Язык программирования c#
- •1.1. Платформа .Net – обзор архитектуры
- •1.2. Язык c# - общие концепции синтаксиса
- •1.3. Система типов языка c#
- •1.4. Преобразования типов
- •1.5. Идентификаторы, ключевые слова и литералы
- •1.6. Объявление переменных, полей и констант
- •1.7. Выражения и операции
- •1.8. Операторы языка c#
- •1.9. Объявление и вызов методов
- •1.10. Массивы в c#
- •1.11. Работа с символами и строками в c#
- •1.12. Синтаксис объявления класса, Поля и методы класса
- •1.13. Свойства и индексаторы
- •1.14. Конструкторы класса и Жизненный цикл объекта
- •1.15. Наследование классов
- •1.16. Перегрузка операЦий
- •1.17. Делегаты
- •1.18. События
- •1.19. Интерфейсы
- •1.20. Структуры и перечисления
- •1.21. Пространства имен
- •1.22. Генерация и обработка исключительных ситуаций
- •1.23. Нововведения в языке c# 2.0
- •1.24. Обобщенные типы (generics)
- •2. Базовые элементы .Net Framework
- •2.1. Метаданные и механизм отражения
- •2.2. Пользовательские и встроенные атрибуты
- •2.3. Пространство имен system.Collections
- •2.4. Работа с файлами и директориями
- •2.5. Использование потоков данных
- •2.6. Сериализация
- •2.7. Сериализация объектов в нестандартном формате
- •2.8. Введение в xml
- •2.9. Работа с xml-документами в .Net framework
- •2.10. МНогопоточное программирование
- •2.11. Синхронизация потоков
- •2.12. Асинхронный вызов методов
- •2.13. Состав и взаимодействие сборок
- •2.14. Конфигурирование сборок
- •3. ТЕхнология .Net Remoting
- •3.1. Домены приложений
- •3.2. Архитектура .Net Remoting
- •3.3. Активация удаленных объектов и их время жизни
- •3.4. Программная настройка Remoting
- •3.5. Удаленные Объекты с клиентской активацией
- •3.6. Настройка Remoting при помощи конфигурационных файлов
- •3.7. Хостинг распределенных приложений
- •3.8. Объекты-сообщения
- •3.9. Пользовательские канальные приемники
- •4.1. Архитектура ado.Net
- •4.2. Учебная база cd Rent
- •4.3. Соединение с базой данных
- •4.4. Выполнение команд и запросов к базе данных
- •4.5. Чтение данных и объект DataReader
- •4.6. Параметризированные запросы
- •4.7. Рассоединенный набор данных
- •4.8. Заполнение Рассоединенного набора данных
- •4.9. Объект класса DataColumn – колонка таблицы
- •4.10. Объекты класса DataRow – строки таблицы
- •4.11. Работа с объектом класса DataTable
- •4.12. DataSet и схема рассоединенного набора данных
- •4.13. Типизированные DataSet
- •4.14. Поиск и фильтрация данных в DataSet
- •4.15. Класс DataView
- •4.16. СиНхронизация набора данных и базы
- •5.1. Архитектура и общие концепции asp.Net
- •5.2. Пример aspx-страницы. Структура страницы
- •5.3. Директивы страницы
- •5.4. Класс System.Web.Ui.Page. События страницы
- •5.5. Серверные элементы управления
- •5.6. Элементы управления Web Controls
- •5.7. Проверочные элементы управления
- •5.8. Списковые элементы управления
- •5.9. Связывание данных
- •5.11. Управление состояниями в web-приложениях
- •5.12. Кэширование
- •5.13. Безопасность в web-приложениях
- •5.14. Создание пользовательских элементов управления
- •Литература
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. Если страница отображается в первый раз, то происходят такие события (в описанной последовательности):
Init. Событие происходит после того, как каждый управляющий элемент был создан и помещен во внутреннюю коллекцию элементов страницы.
Load. Установлены заданные в описании страницы свойства управляющих элементов. Как правило, в обработчике события Load помещается код, который выполняет дополнительную настройку свойств элементов – например, читает некоторые свойства из базы данных. Для того чтобы дополнительная настройка проходила только один раз, обычно проверяют значение свойства IsPostBack (if(!IsPostBack) ...).
PreRender. Каждый элемент управления готов к выводу.
SaveVeiwState. Информация о состоянии элементов управления сериализуется в закодированную строку и передается клиенту.
Render. Событие происходит перед выводом страницы клиенту.
Dispose. Страница и ее элементы управления освобождаются из памяти.
Если страница отображается не в первый раз, а в цикле обмена с клиентом, то дополнительно происходят следующие события:
Init.
LoadViewState. Информация о состоянии загружена в соответствующие свойства управляющих элементов.
Load.
RaisePostDataChanged. В управляющее элементы была помещена информация, которая передана методом POST протокола HTTP.
RaisePostBackEvent. Обрабатываются события, которые привели к отправке информации на сервер (такие, как нажатие кнопки).
PreRender.
SaveVeiwState.
Render.
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. Страница с обработчиками событий в браузере