Директивы используются для установки отдельных параметров страницы, таких как язык программирования для кода страницы или подключение пространства имен. Директива начинается с символа @, за которым следует имя директивы и набор атрибутов. Директивы могут размещаться в любом месте страницы, но вне 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:
Директива @Reference устанавливает динамическую связь между текущей страницей и другой страницей или пользовательским элементом управления. Директива может встречаться в теле страницы несколько раз и имеет два взаимоисключающих атрибута ‑ Page и 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-код. Благодаря этому при возврате формы элементы управления страницы инициализируются теми же значениями, какие они имели в тот момент, когда в последний раз осуществлялся рендеринг страницы для клиента. На дополнительном этапе жизненного цикла страницы происходит объединение сохраненного состояния представления с изменениями, внесенными в результате действий клиента. Таким образом, после возврата формы страница выполняется в актуальном контексте, как будто используется непрерывное соединение «точка-точка».
Данная схема выполнения страницы основана на важном предположении о том, что страница всегда выполняет возврат формы самой себе и передаёт между клиентом и сервером состояние представления.
Весь жизненный цикл страницы условно разделяют на этапы. Одними этапами можно управлять с помощью обработчиков событий, другие требуют переопределения методов. Некоторые этапы (или их составляющие) недоступны контролю разработчика, и упоминаются здесь для полноты изложения.
В жизненном цикле страницы можно выделить три главных этапа: подготовительный, этап обработки информации, связанной с возвратом формы, и завершающий. Каждый из них делится на несколько меньших шагов, на которых генерируются события. Описание жизненного цикла страницы охватывает все возможные пути её выполнения. Однако следует понимать, что описанный процесс может изменяться в зависимости от текущей ситуации: страница выполняется в первый раз, имеет место межстраничный возврат формы, обратный вызов сценария или обычный возврат формы.
Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет
studopedia.su - Студопедия (2013 - 2025) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав!Последнее добавление