Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Серверные элементы управления и серверная форма




Директивы страницы.

Директивы используются для установки отдельных параметров страницы, таких как язык программирования для кода страницы или подключение пространства имен. Директива начинается с символа @, за которым следует имя директивы и набор атрибутов. Директивы могут размещаться в любом месте страницы, но вне HTML-элементов. Как правило, директивы помещают в начале страницы.

Серверные элементы управления описываются с помощью специальных тэгов с обязательным атрибутом runat="server". Они соответствуют полям в классе страницы. Серверный элемент управления обладает набором свойств, установка которых возможна на странице как задание соответствующий атрибутов. Все серверные элементы должны быть размещены в пределах серверной формы (<form runat="server">).

3. HTML-код. HTML-код не обрабатывается процессом ASP.NET специальным образом, а сразу пересылается клиенту. Выводом HTML-кода занимается специальный внутренний метод класса, который соответствует странице.

4. Блоки серверного кода. Это блоки, обрамленные тэгом <script> с обязательным атрибутом runat="server". Блоки серверного кода транслируются в члены класса, соответствующего странице. В приведенном примере класс будет содержать метод btnSend_Click(). Отметим, что наличие блоков серверного кода на странице противоречит концепции Code Behind. Согласно данной концепции код, связанный со страницей, должен быть помещен в отдельный класс, от которого наследуется класс страницы.

5. Блоки рендерного кода. Блоки рендерного кода используются для генерации потока вывода. При обработке на сервере блоки рендерного кода помещаются непосредственно в метод, выполняющий вывод HTML-кода. Если блок рендерного кода записывается в форме <%= выражение %>, то в метод вставляется вывод вычисленного выражения.

Кроме упомянутых выше элементов, страница ASP.NET может содержать комментарии, блоки привязки данных (они будут подробно рассмотрены далее), клиентские скрипты.

5.4. ДИРЕКТИВЫ СТРАНИЦЫ

Директивы страницы служат для конфигурирования среды её выполнения. Список основных директив приведён в табл. 2[2]. Самой важной и часто используемой директивой является @Page.

Таблица 2. Директивы страницы

Директива Описание
@Assembly Связывает сборку с текущей страницей или пользовательским элементом управления
@Control Позволяет задать атрибуты, специфические для пользовательских элементов управления и влияющие на их компиляцию
@Implements Указывает, что страница или пользовательский элемент управления реализует заданный интерфейс
@Import Задает пространство имен, которое должно быть импортировано в страницу или пользовательский элемент управления
@Master Идентифицирует эталонную страницу «[3]
@OutputCache Определяет политики кэширования вывода страницы
@Page Позволяет задать специфичные для страниц атрибуты, управляющие поведением синтаксического анализатора и компилятора
@Reference Связывает страницу или пользовательский элемент управления с текущей страницей или пользовательским элементом управления
@Register Определяет для страницы или элемента управления пользовательский тэг. Этот новый тэг (идентифицируемый префиксом и именем) связывается с пространством имен и кодом пользовательского элемента управления

Все директивы, за исключением @Page, @Master и @Control, могут использоваться как в файлах страниц, так и в файлах элементов управления. Директивы @Page и @Control являются взаимоисключающими: первая может использоваться только в файлах.aspx (страницах), а вторая ‑ только в файлах.ascx (элементах управления). Что касается директивы @Master, то она идентифицирует страницу особого вида ‑ эталонную страницу.

Каждая директива имеет собственный набор типизированных атрибутов. Присвоение атрибуту значения неверного типа или использование в директиве не поддерживаемого ею атрибута приводит к ошибке компиляции.

Любой файл.aspx может содержать директиву @Page, и хотя её наличие не является обязательным, на практике она требуется каждой более или менее сложной странице. У директивы @Page около тридцати атрибутов, которые могут быть логически разделены на три категории: связанные с компиляцией (табл. 3), общим поведением страницы (табл. 4) и её выводом (табл. 5). Страница ASP.NET компилируется при первом обращении к ней, и отправляемый браузеру HTML-код генерируется методами динамически создаваемого класса. Атрибуты, перечисленные в табл. 3, позволяют настраивать параметры компилятора.

Таблица 3

Атрибуты директивы @Page, связанные с компиляцией

Атрибут Описание
ClassName Имя класса (без пространства имен), который будет динамически компилироваться по запросу страницы
CodeFile Путь к файлу отделенного кода текущей страницы. Файл исходного кода должен быть развернут на веб-сервере «
CodeBehind Путь к файлу отделенного кода текущей страницы, подлежащему компиляции в развертываемую сборку
CodeFileBaseClass Родительский класс родительского класса страницы. Иными словами, в этом атрибуте задается имя класса, от которого должен быть производным класс отделенного кода страницы «
CompilationMode Одно из трех значений, указывающих, должна ли страница компилироваться во время выполнения: Never, Auto или Always[4] «
CompilerOptions Опции компилятора
Debug Булево значение, указывающее, должна ли страница компилироваться с отладочными символами
Explicit Булево значение, указывающее, должна ли страница, языком которой является VB.NET, компилироваться с установкой Option Explicit On
Inherits Базовый класс, наследуемый страницей. Им может быть любой класс, производный от System.Web.UI.Page
Language Язык, который должен использоваться при компиляции встроенных блоков кода. Поддерживаются языки VB.NET, C#, JScript.NET и J#
MasterPageFile Эталонная страница для текущей страницы «
Src Файл исходного кода, содержащий реализацию базового класса, заданного в атрибуте Inherits (атрибут не используется Visual Studio)
Strict Булево значение, указывающее, должна ли страница, языком которой является VB.NET, компилироваться с установкой Option Strict On
Trace Булево значение, указывающее, включена ли трассировка страницы. Если трассировка включена, в вывод страницы добавляется трассировочная информация. По умолчанию – false
TraceMode Указывает, как при включенной трассировке должны отображаться трассировочные сообщения. Допустимыми значениями являются SortByTime и SortByCategory
WarningLevel Определяет степень важности предупреждения компилятора, достаточную для прекращения им компиляции страницы. Допустимы значения от 0 до 4

Атрибуты, перечисленные в табл. 4, обеспечивают контроль над общим поведением страницы и поддерживаемыми возможностями. Например, с их помощью можно задать пользовательскую страницу сообщения об ошибке, отключить поддержку состояния сеанса, управлять транзакционным поведением страницы.

Таблица 4

Атрибуты директивы @Page, определяющие поведение страницы

Атрибут Описание
AspCompat Если атрибут имеет значение true, разрешено выполнение страницы в однопоточном апартаментном режиме (STA)
Async Если атрибут имеет значение true, генерируемый класс страницы реализует не IHttpHandler, а IHttpAsyncHandler (функция поддержки асинхронного выполнения страницы) «
AutoEventWireup Булев атрибут; указывает, должны ли события подключаться к соответствующим элементам управления автоматически (исходя из имени обработчика)
Buffer Булево значение, определяющие, включена ли буферизация ответов HTTP. По умолчанию атрибут имеет значение true
Description Текстовое описание страницы. Атрибут предназначен для целей документирования
EnableSessionState Способ работы страницы с данными состояния сеанса. Если этот атрибут имеет значение true, состояние сеанса считывается и за­писывается, при значении false оно недоступно приложению, а при значении ReadOnly состояние сеанса может считываться, но не изменяться
EnableViewState Булев атрибут, указывающий, сохраняется ли состояние представления страницы между ее запросами
EnableViewStateMac Булев атрибут, указывающий, должна ли ASP.NET вычислять машинно-зависимый аутентификационный код и применять его к состоянию представления страницы (в дополнение к кодированию методом Base64)
ErrorPage Определяет целевой URL, по которому пользователь будет автоматически перенаправлен, если при выполнении страницы произойдет необработанное исключение
SmartNavigation Булев атрибут, указывающий, поддерживает ли страница функции интеллектуальной навигации, позволяющие обновлять страницу, не теряя позицию прокрутки и фокус элемента
Theme, StylesheetTheme Имя темы (или темы таблицы стилей) для страницы «
Transaction Указывает, поддерживает ли страница транзакции. Допустимыми значениями являются: Disabled, NotSupported, Supported, Required и RequiresNew
ValidateRequest Булев атрибут, указывающий, должна ли производиться проверка запроса. Если атрибут имеет значение true, ASP.NET сверяет все вводимые данные с жестко закодированным списком потенциально опасных значений, что позволяет уменьшить риск межсайтовых сценарных атак «

Атрибуты, перечисленные в табл. 5, позволяют управлять форматом генерируемого страницей вывода. Например, вы можете задать тип контента страницы или локализовать вывод.

Таблица 5

Атрибуты директивы @Page, влияющие на вывод страницы

Атрибут Описание
ClientTarget Целевой браузер, для которого должен быть адаптирован выводимый серверными элементами управления контент
CodePage Номер кодовой страницы для ответа. Атрибут следует устанавливать только в том случае, если создается страница с использованием кодовой страницы, отличной от заданной по умолчанию для веб-сервера
ContentType Тип контента ответа (один из стандартных MIME-типов)
Culture Культура страницы. От этой установки зависят такие параметры, как система записи и сортировки текста, календарь, форматы даты и времени. Имя культуры должно включать как идентификатор языка, так и идентификатор страны. Например, допустимым является идентификатор en-US
LCID 32-разрядный идентификатор культуры страницы. По умолчанию используется идентификатор культуры веб-сервера
ResponseEncoding Идентификатор кодировки символов страницы. Это значение ис­пользуется для установки атрибута CharSet в заголовке HTTP Content-Type
UICulture Имя задаваемой по умолчанию культуры, используемое менедже­ром ресурсов для поиска культуро-зависимых ресурсов во время выполнения приложения

Директива @Assembly связывает с текущей страницей сборку, классы и интерфейсы которой должны быть доступны этой странице. Компилируя страницу, ASP.NET автоматически связывает с ней несколько сборок, определенных как используемые по умолчанию. Помимо этих сборок исполняющая среда ASP.NET автоматически связывает со страницей все те сборки, которые она находит в папке Bin приложения.

Для того чтобы связать сборку со страницей, включите в файл последней одну из двух следующих директив:

<%@ Assembly Name="имя_сборки" %>

 

<%@ Assembly Sгс="код_сборки.cs" %>

У директивы @Assembly есть два взаимоисключающих атрибута: Name и Src. Атрибут Name определяет имя сборки, которая должна быть связана со страницей (это имя не содержит пути и расширения). В атрибуте Src указывается путь к исходному файлу, подлежащему динамической компиляции и последующему связыванию со страницей.

Директива @Import используется для импорта пространств имен для страницы. Пример использования директивы:

<%@ Import Namespace="CommonNS" %>

Одна директива @Import позволяет импортировать одно пространство имен, поэтому для импортирования нескольких пространств надо повторить директиву. При работе с ASP.NET автоматически импортирует следующие пространства имен:

System System.Web.Profile
System.Collections System.Web.Security
System.Collections.Specialized System.Web.SessionState
System.Configuration System.Web.UI
System.Text System.Web.UI.HtmlControls
System.Text.RegularExpressions System.Web.UI.WebControls
System.Web System.Web.UI.WebControls.WebParts
System.Web.Caching  

Директива @Implements позволяет реализовать на странице интерфейс. При реализации интерфейса вы сообщаете, что страница будет поддерживать определенные свойства, методы и события (аналогично реализации интерфейса в классе). В следующем примере указано, что страница реализует интерфейс IPostBackEventHandler:

<%@ Implements Interface="IPostBackEventHandler" %>

Директива @Reference устанавливает динамическую связь между текущей страницей и другой страницей или пользовательским элементом управления. Директива может встречаться в теле страницы несколько раз и имеет два взаимоисключающих атрибута ‑ Page и Control, в каждом из которых задается путь к некоторому исходному файлу:

<%@ Reference Page="страница" %>

 

<%@ Reference Control="пользовательский_элемент_управления" %>

Атрибут Page указывает на исходный файл.aspx, то есть на файл страницы, а атрибут Control ‑ на исходный файл.ascx, то есть на файл пользовательского элемента управления. В обоих случаях заданный исходный файл динамически компилируется в сборку и определенные в нем классы становятся программно доступными странице, содержащей директиву @Reference.

Директива @Register используется при добавлении на страницу индивидуального серверного элемента управления для сообщения компилятору информации об этом элементе. Директива @OutputCache управляет кэшем вывода для страницы или пользовательского элемента управления. Подробный синтаксис этих директив будет рассмотрен в соответствующих параграфах.

5.5. Класс SYSTEM.WEB.UI.Page

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

Рассмотрим свойства класса Page подробнее. Для удобства разделим их на несколько групп. В табл. 6 приведен список свойств, возвращающих внутренние объекты страницы. Эти объекты являются важными элементами инфраструктуры, обеспечивающей выполнение страницы.

Таблица 6

Внутренние объекты класса System.Web.UI.Page

Имя свойства Описание
Application Объект класса HttpApplicationState, описывающий состояние приложения, к которому относится страница. Для отдельного веб-приложения существует ровно один объект Application, который используется всеми клиентами
Cache Объект класса Cache, ссылка на кэш данных веб-приложения
Request Объект HttpRequest – информация о HTTP-запросе
Response Объект HttpResponse – информация о HTTP-ответе
Server Объект класса HttpServerUtility, описывающий параметры веб-сервера
Session Объект класса HttpSessionState, хранящий данные текущей сессии пользователя в веб-приложении
Trace Объект класса TraceContext. Если на странице разрешена трассировка, то можно пользоваться данным объектом для записи особой информации в журнал трассировки
User Ссылка на объект, реализующий интерфейс IPrincipal и описывающий пользователя, от которого поступил запрос

В табл. 7 перечислены свойства Page, содержащие важную информацию и используемые при реализации определенной функциональности.

Таблица 7

Рабочие свойства класса System.Web.UI.Page

Имя свойства Описание
ClientScript Объект класса ClientScriptManager, содержащий клиентский сценарий, используемый в составе страницы «
Controls Коллекция дочерних элементов управления страницы
ErrorPage Страница с сообщения об ошибке, куда в случае обнаружения необработанного исключения будет перенаправлен браузер
Form Возвращает текущий объект HtmlForm для страницы «
Header Объект, который представляет заголовок страницы «
IsAsync Указывает, вызвана ли страница асинхронно «
IsCallback Указывает, загружена ли страница в ответ на обратный вызов клиентского сценария «
IsCrossPagePostBack Указывает, загружена ли страница в ответ на возврат формы, выполненный другой страницей «
IsPostBack Указывает, загружена страница в ответ на возврат формы клиентом или это её первая загрузка
IsValid Указывает, успешно ли прошла валидация страницы
Master Экземпляр класса MasterPage, представляющий эталонную страницу, связанную с текущей страницей «
MasterPageFile Имя файла эталонной страницы для текущей страницы «
NamingContainer Возвращает значение null[5]
Page Возвращает текущий объект Page
PageAdapter Возвращает адаптерный объект текущего объекта Page
Parent Возвращает значение null
PreviousPage В случае межстраничного возврата формы возвращает ссылку на вызывающую страницу «
TemplateSourceDirectory Возвращает имя виртуального каталога страницы
Validators Коллекция имеющихся в составе страницы проверочных элементов управления
ViewStateUserKey Пользовательский идентификатор, который предназначен для хеширования данных View State. Он используется для защиты от атак, когда злоумышленник отправляет серверу поддельное состояние представления страницы «

В табл. 8 перечислены свойства класса Page, представляющие визуальные и невизуальные атрибуты страницы, такие как URL строки запроса, целевой клиент и таблица стилей.

Таблица 8

Свойства, специфичные для страницы

Имя свойства Описание
ClientID Всегда возвращает пустую строку
ClientQueryString Возвращает URL из строки запроса «
ClientTarget По умолчанию содержит пустую строку; позволяет задать тип целевого браузера, для которого должна быть адаптирована результирующая разметка. При установке этого свойства отключается функция автоматического определения возможностей браузера
EnableViewState Указывает, должна ли страница управлять данными состояния представления
EnableViewStateMac Указывает, должна ли ASP.NET вычислять машинно-зависимый аутентификационный код и добавлять его к состоянию представления страницы
EnableTheming Указывает, применяются ли к странице темы «
ID Всегда возвращает пустую строку
MaintainScrollPosition- OnPostback Указывает, следует ли после возврата формы восстанавливать позицию просмотра страницы в браузере «
SmartNavigation Указывает, осуществляется ли интеллектуальная навигация[6]
StyleSheetTheme Имя таблицы стилей, которая будет применена к странице «
Theme Имя темы страницы «
Title Возвращает и позволяет задать заголовок страницы «
TraceEnabled Позволяет включить или отключить трассировку страницы «
TraceModeValue Режим трассировки страницы «
UniqueID Всегда возвращает пустую строку
ViewStateEncryptionMode Указывает, должно ли быть зашифровано состояние страницы и, если должно, то как именно
Visible Указывает, должна ли ASP.NET осуществлять рендеринг страницы. Если значение равно false, ASP.NET не будет генерировать для страницы HTML-код, и клиент получит только тот текст, который записан в выходной поток с помощью метода Response.Write()

Три свойства-идентификатора (ID, ClientID и UniqueID) объекта Page всегда возвращают пустую строку. Они предназначены лишь для серверных элементов управления.

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

В табл. 9 перечислены методы, которые так или иначе связаны с генерированием кода разметки страницы.

Таблица 9

Методы Page, связанные с генерированием кода разметки

Имя метода Описание
DataBind() Этот метод связывает все имеющиеся в составе страницы элементы управления с их источниками данных. Сам метод DataBind() не генерирует разметку, но осуществляет необходимую подготовку к последующему рендерингу
RenderControl() Выводит HTML-код, в том числе информацию трассировки, если данная функция включена
VerifyRendering- InServerForm() Элементы управления вызывают этот метод непосредственно перед рендерингом, проверяя, включены ли они в тело серверной формы

В табл. 10 перечислены вспомогательные методы класса Page, предназначенные для управления дочерними элементами управления, выполнения их проверки и разрешения URL.

Таблица 10

Вспомогательные методы класса Page

Имя метода Описание
DesignerInitialize() Инициализирует объект страницы, когда она отображается в дизайнере Visual Studio или другого RAD-средства
FindControl() Принимает идентификатор элемента управления и ищет его в контейнере именования страницы. Поиск не производится среди дочерних элементов управления, которые сами являются контейнерами имён
GetTypeHashCode() Извлекает хэш-код, сгенерированный объектом страницы во время выполнения
GetValidators() Возвращает коллекцию проверочных элементов управления для определенной группы проверки «
HasControls() Определяет, содержит ли страница дочерние элементы
LoadControl() Компилирует пользовательский элемент управления из файла.ascx, загружает его и возвращает объект Control
LoadTemptate() Компилирует пользовательский элемент управления из файла.ascx, загружает его и возвращает заключенным внутрь экземпляра класса SimpleTemplate, реализующего интерфейс ITemplate
MapPath() Извлекает полный физический путь, соответствующий заданному абсолютному или относительному виртуальному пути
ParseControl() Выполняет разбор заданной строки, содержащей допустимый код разметки, и возвращает экземпляр соответствующего элемента управления. Если строка содержит несколько элементов управления, возвращается только первый. Атрибут runat может быть опущен. Метод возвращает объект типа Control, который должен быть приведен к более конкретному типу
RegisterRequires- ControlState() Регистрирует заданный элемент управления как требующий сохранения состояния «
RegisterRequires- PostBack() Регистрирует заданный элемент управления как получатель уведомления об обработке события обратного вызова, даже если его идентификатор не соответствует ни одному из идентификаторов в коллекции возвращенных данных. Элемент управления должен реализовать интерфейс IPostBackDataHandler
RegisterRequires- RaiseEvent() Регистрирует элемент управления как обработчик события возврата формы. Этот элемент управления должен реализовать интерфейс IPostBackEventHandler
Register- ViewStateHandler() Предназначенный главным образом для внутреннего применения, этот метод устанавливает внутренний флаг, который сигнализирует о необходимости сохранить состояние представления страницы. Если не вызвать этот метод на этапе предрендеринга, состояние представления никогда не будет сохранено. Обычно данный метод вызывается только серверным элементом управления HtmlForm. Из пользовательских приложений вызывать его ни к чему
ResolveUrl() По заданному относительному URL возвращает абсолютный, основываясь на значении свойства TemplateSourceDirectory
Validate() Указывает проверочным элементам управления страницы на необходимость проверить введенную информацию

В табл. 11 перечислены методы класса Page, имеющие отношение к HTML и коду сценариев, вставляемых в клиентскую страницу.

Таблица 11

Методы класса Page, связанные со сценариями

Имя метода Описание
GetCallbackEventReference() Получает ссылку на клиентскую функцию, осуществляющую обратный вызов серверного кода «
GetPostBackClientEvent() Вызывает метод GetCallbackEventReference()
GetPostBackClientHyperlink() Добавляет javascript: в начало строки, полученной от метода GetPostBackEventReference(), например: javascript:_doPostBack('CtlID', ")
GetPostBackEventReference() Возвращает прототип функции клиентского сценария, осуществляющей обратный вызов серверного кода; метод принимает объект Control и аргумент функции и возвращает строку, подобную следующей: _doPostBack('CtlID', ")
SetFocus() Дает указание браузеру присвоить фокус ввода заданному элементу управления «

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

Таблица 12

События, которые может генерировать страница

Событие Когда генерируется
AbortTransaction Отменена автоматическая транзакция, в которой участвует данная страница ASP.NET
CommitTransaction Завершена автоматическая транзакция, в которой участвует данная страница ASP.NET
DataBinding Для страницы вызван метод DataBind()
Disposed Страница удаляется из памяти
Error Сгенерировано необработанное исключение
Init Страница инициализируется (это первый этап её жизненного цикла)
InitComplete Все дочерние элементы управления и сама страница инициализированы «
Load Инициализированная страница загружается
LoadComplete Загрузка страницы завершена, сгенерированы серверные события «
PreInit Непосредственно перед началом этапа инициализации страницы «
PreLoad Непосредственно перед началом этапа загрузки страницы «
PreRender Страница готова к рендерингу
PreRenderComplete Непосредственно перед началом этапа рендеринга страницы «
SaveStateComplete Состояние представления страницы сохранено в памяти «
Unload Страница выгружается из памяти, но ещё не уничтожена

5.6. ЖИзненный цикл страницы

В данном параграфе подробно рассматриваются все этапы жизненного цикла страницы ASP.NET.

Класс страницы и входящие в её состав элементы управления отвечают за выполнение запроса к этой странице и рендеринг HTML-кода для клиента. Взаимодействие между клиентом и сервером осуществляется без сохранения состояния, поскольку такова природа протокола HTTP. Однако реальным приложениям необходимо, чтобы определенные данные состояния сохранялись между последовательными вызовами одной и той же страницы. В ASP.NET имеется встроенная инфраструктура, которая сохраняет и восстанавливает состояние страницы прозрачным для приложения способом. Таким образом, несмотря на природу базового протокола, пользователю кажется, что он участвует в непрерывном процессе.

Иллюзия непрерывности создается подсистемой ASP.NET, отвечающей за управление состоянием представления страниц. Перед рендерингом своего контента в HTML-формате страница кодирует и сохраняет (обычно в скрытом поле), всю информацию состояния представления. Когда происходит возврат формы, состояние представления извлекается из скрытого поля, десериализуется и используется для инициализации экземпляров серверных элементов управления.

Состояние представления уникально для каждого экземпляра страницы, поскольку оно встроено в HTML-код. Благодаря этому при возврате формы элементы управления страницы инициализируются теми же значениями, какие они имели в тот момент, когда в последний раз осуществлялся рендеринг страницы для клиента. На дополнительном этапе жизненного цикла страницы происходит объединение сохраненного состояния представления с изменениями, внесенными в результате действий клиента. Таким образом, после возврата формы страница выполняется в актуальном контексте, как будто используется непрерывное соединение «точка-точка».

Данная схема выполнения страницы основана на важном предположении о том, что страница всегда выполняет возврат формы самой себе и передаёт между клиентом и сервером состояние представления.

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

В жизненном цикле страницы можно выделить три главных этапа: подготовительный, этап обработки информации, связанной с возвратом формы, и завершающий. Каждый из них делится на несколько меньших шагов, на которых генерируются события. Описание жизненного цикла страницы охватывает все возможные пути её выполнения. Однако следует понимать, что описанный процесс может изменяться в зависимости от текущей ситуации: страница выполняется в первый раз, имеет место межстраничный возврат формы, обратный вызов сценария или обычный возврат формы.




Поделиться с друзьями:


Дата добавления: 2014-01-11; Просмотров: 492; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.063 сек.