ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Шрифт:
Таблица 23.6. Свойства типа HttpResponse
Свойство | Описание |
---|---|
Cache | Возвращает семантику кэширования Web-страницы (например, время ожидания, параметры конфиденциальности, различные описания) |
ContentEncoding | Читает или устанавливает набор символов выходного потока HTTP |
ContentType | Читает или устанавливает MIME-тип выходного потока HTTP |
Cookies | Получает коллекцию HttpCookie, посланную текущим запросом |
IsClientConnected | Читает
|
Output | Разрешает пользовательский вывод в поле содержимого исходящего HTTP-сообщения |
OutputStream | Разрешает двоичный вывод в поле содержимого исходящего HTTP-сообщения |
StatusCode | Читает или устанавливает код состояния HTTP-ответа, возвращаемого клиенту |
StatusDescription | Читает или устанавливает строку состояния HTTP-ответа, возвращаемого клиенту |
SuppressContent | Читает или устанавливает значение, являющееся индикатором отмены отправки HTTP-содержимого клиенту |
Рассмотрите также описания некоторых методов типа HttpResponse, представленные в табл. 23.7.
Таблица 23.7. Методы типа HttpResponse
Метод | Описание |
---|---|
AddCacheDependency | Добавляет объект в кэш приложения (см. главу 24) |
Clear | Удаляет все заголовки и содержимое вывода из буфера потока |
End | Отправляет все содержимое буфера вывода клиенту, а затем завершает соединение для данного сокета |
Flush | Отправляет все содержимое буфера вывода клиенту |
Redirect | Выполняет перенаправление клиента по новому URL |
Write | Записывает значения в выходной поток HTTP-содержимого |
WriteFile | Записывает файл непосредственно в выходной поток HTTP-содержимого |
Генерирование HTML-содержимого
Пожалуй, самой известной сферой применения типа HttpResponse является запись содержимого непосредственно в выходной поток HTTP. Метод HttpResponse. Write позволяет передать HTML-дескрипторы, или вообще любые строковые литералы. Метод HttpResponse.WriteFile расширяет эти возможности с тем, чтобы вы могли указать имя физического файла на Web-сервере, содержащего данные, направляемые в выходной поток (это оказывается очень удобным в том случае, когда требуется отправить содержимое уже существующего файла *.htm).
Для примера предположим, что вы добавили в свой файл *.aspx еще один тип Button, который реализует обработчик события Click сервера так.
Роль этой вспомогательной функции (которая может вызываться некоторым: обработчиком события на стороне сервера) очень проста. Единственным заслуживающим внимания моментам здесь является то, что метод HttpResponse. WriteFile теперь отправляет содержимое файла *.htm сервера из корневого каталога Web-узла.
Снова подчеркнем, что вы, конечно, можете использовать подход "старой школы", чтобы отображать HTML-дескрипторы и содержимое, используя метод Write, но этот подход в рамках ASP.NET применяется гораздо реже, чем в рамках классической
Перенаправление пользователей
Другой возможностью типа HttpResponse является перенаправление пользователя по новому адресу URL.
Если этот обработчик событий вызвать с помощью вторичного обращения клиента к серверу, пользователь будет автоматически перенаправлен по указанному URL.
Замечание. Вызов метода HttpResponse.Redirect всегда влечет за собой обращение к браузеру клиента. Если нужно просто передать управление файлу *.aspx в том же виртуальном каталоге, более эффективным будет вызов метода HttpServerUtility.Transfer (доступного через наследуемое свойство Server).
На этом мы завершим обсуждение функциональных возможностей System.Web.UI.Page. Чуть позже мы рассмотрим роль базового класса System.Web.UI.Control, однако нашим следующим заданием будет исследование цикла существования объектов, производных от Page.
Исходный код. Файлы примера FunWithPageMembers размещены в подкаталоге, соответствующем главе 23.
Цикл существования Web-страницы ASP.NET
Каждая Web-страница ASP.NET имеет свой "жизненный цикл". Когда среда выполнения ASP.NET получает входящий запрос для данного файла *. aspx, в памяти размещается соответствующий тип, производный от System.Web.UI.Page, для создания которого используется конструктор, заданный по умолчанию. После этого среда обработки автоматически генерирует серию событий.
По умолчанию сгенерированная в Visual Studio 2005 страница с внешним кодом поддержки определяет обработчик события Load страницы.
Кроме события Load, тип Page может выполнять перехват любого из событий, указанных в табл. 23.8 в том порядке, в котором эти события возникают.
Таблица 23.8. События типа Page
Событие | Описание |
---|---|
PreInit | Используется инфраструктурой .NET для размещения Web-элементов управления, применения тем, создания шаблона страницы и установки профиля пользователя. Вы можете перехватить это событие, чтобы внести изменения в соответствующий процесс |
Init | Используется для установки свойств Web-элементов управления в предыдущее состояние с помощью вторичного запроса или просмотра данных состояния (подробнее об этом говорится в главе 24) |
Load | Возникает тогда, когда страница и ее элементы управления полностью инициализированы, а их предыдущие значения восстановлены. С этого момента вполне безопасно начать взаимодействие с любым из Web-элементов |
"Событие, вызвавшее вторичный запрос" | События с таким именем, конечно же, не существует. Так здесь обозначено любое событие, заставившее браузер отправить вторичный запрос Web-cер-веру (это может быть, например, щелчок на кнопке) |
PreRender | Привязка данных и конфигурация пользовательского интерфейса завершена, и элементы управления готовы отправить свои данные в поток исходящего HTTP-ответа |
Unload | Страница и её элементы управления завершили процесс передачи данных, и объект страницы готов к уничтожению. Взаимодействие с исходящим HTTP-ответом в этот момент породит ошибку среды выполнения. Можно выполнить захват этого события для "уборки мусора" на уровне страницы (чтобы закрыть файлы и базы данных, выполнить процедуру выхода из системы, освободить ресурсы и т.д.) |