Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_CSharp_5.docx
Скачиваний:
32
Добавлен:
11.11.2019
Размер:
475.45 Кб
Скачать

3.4. Генерирование разметки

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

3.5. Событие Unload

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

Заметим, что уведомление о выгрузке страницы или элемента управления из памяти поступает непосредственно перед выполнением этой операции, поэтому, пока происходит его обработка, объект еще не удален. Для освобождения памяти, занимаемой объектом страницы, её процессор вызывает метод Dispose(). Это происходит сразу после того, как завершится выполнение всех рекурсивно вызванных обработчиков события Unload. Переопределение метода Dispose() класса Page или обработка события Disposed страницы, даёт последнюю возможность выполнить для неё действия по освобождению ресурсов, пока она сама не будет удалена из памяти.

5.7. Общий обзор серверных элементов управления

Важным элементом технологии ASP.NET являются серверные элементы управления (server controls). Серверный элемент управления – это некий класс, объект которого агрегирован в страницу. При выполнении рендеринга страницы серверный элемент транслируется в один или несколько HTML-тэгов.

Библиотека серверных элементов насчитывает порядка сотни классов. Условно все элементы можно разделить на следующие группы:

  1. Элементы управления HTML – эквиваленты обычных HTML-тэгов. Имеют атрибуты, сходные с атрибутами HTML-тэгов.

  2. Элементы управления Web – набор элементов, равнозначный обычным HTML-элементам, но обладающих расширенным набором свойств и событий, облегчающий создание страницы.

  3. Проверочные элементы управления – набор специальных элементов для проверки корректности значений, вводимых в другие элементы на странице. Выполняют проверку на стороне клиента и сервера.

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

  5. Навигационные элементы управления – группа элементов для навигации по сайту (например, реализация меню сайта).

  6. Элементы управления Login – элементы для работы с пользователями сайта ‑ регистрация, вход, управление паролями и ролями.

  7. Элементы управления Web Parts – специфические элементы управления для реализации технологии Web Parts.

  8. Элементы управления AJAX Extensions –элементы управления для технологии AJAX (введены в ASP.NET 3.5).

Для всех серверных элементов управления справедливы следующие замечания. Настройка элементов может быть выполнена декларативно и программно. При декларативной настройке значения атрибутов элемента транслируются в соответствующие значения свойств. Например, в следующем фрагменте разметки страницы у элемента Button (кнопка) заданы свойства ID (идентификатор элемента и имя поля в классе страницы) и Text (надпись на кнопке):

<asp:Button ID="btnSend" runat="server" Text="Send" />

При задании серверного элемента на странице используется соответствующий тэг с обязательным атрибутом runat="server".

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

<asp:Label ID="lblExamlpe" runat="server">

This is a label content

</asp:Label>

Абсолютно все серверные элементы управления являются наследниками класса System.Web.UI.Control. Рассмотрим свойства, методы и события данного класса. Свойства класса Control приведены в табл. 13.

Таблица 13

Свойства класса Control

Имя свойства

Описание

BindingContainer

Элемент управления, который является логическим родителем текущего элемента в контексте связывания с данными 

ClientID

Идентификатор, который будет присвоен элементу управления в HTML-странице. Является измененной версией свойства UniqueID: символы знак доллара ($) в UniqueID заменяются символом подчеркивания (_) в ClientID

Controls

Коллекция ссылок на все дочерние элементы управления

EnableTheming

Указывает, применяются ли к элементу управления темы 

EnableViewState

Указывает, должен ли элемент сохранять между запросами состояние представления (свое и своих дочерних элементов)

ID

Имя, которое будет использоваться для программной идентификации элемента управления в коде страницы

NamingContainer

Контейнер именования элемента управления. Контейнером именования элемента является его родительский элемент, реализующий интерфейс INamingContainer. Если такого элемента не существует, контейнером именования является страница

Page

Страница, содержащая элемент управления

Parent

Родительский элемент данного элемента управления согласно иерархии элементов страницы

Site

Контейнер, в котором содержится текущий элемент управления, когда он выводится на рабочей поверхности дизайнера. Используется в дизайнере Visual Studio

SkinID

Имя обложки, применяемой к элементу управления 

TemplateControl

Шаблон, содержащий текущий элемент управления 

TemplateSourceDirectory

Имя виртуального каталога хост-страницы

UniqueID

Иерархически уточненный идентификатор элемента

Visible

Указывает и позволяет определить, должна ли ASP.NET осуществлять рендеринг элемента управления

В табл. 14 приведено описанием методов класса Control.

Таблица 14

Методы класса Control

Имя метода

Описание

ApplyStyleSheetSkin()

Применяет к элементу управления свойства, определенные в таблице стилей страницы. Какая именно обложка используется, зависит от значения свойства SkinID 

DataBind()

Генерирует событие DataBinding, после чего вызывает для всех дочерних элементов управления метод DataBind()

Dispose()

Предоставляет элементу управления возможность выполнить задачи очистки, прежде чем тот будет удален из памяти

Focus()

Присваивает элементу управления фокус ввода 

FindControl()

Ищет заданный элемент управления в коллекции дочерних эле­ментов

HasControls()

Указывает, имеет ли элемент управления дочерние элементы

RenderControl()

Генерирует для элемента управления вывод HTML

ResolveClientUrl()

Служит для получения URL, который может использоваться клиентом для доступа к ресурсам веб-сервера, таким как файлы изображений, дополнительные страницы и т. д.

ResolveUrl()

Разрешает относительный URL, возвращая абсолютный на основе значения свойства TemplateSourceDirectory

Класс Control определяет набор базовых событий, поддерживаемых всеми серверными элементами управления. Эти события описаны в табл. 15.

Таблица 15

События класса Control

Событие

Когда происходит

DataBinding

Для элемента управления вызван метод DataBind() и производится связывание этого элемента с источником данных

Disposed

Элемент управления удаляется из памяти (это последний этап его жизненного цикла)

Init

Элемент управления инициализируется

Load

Элемент управления загружается в память. Данное событие происходит после события Init

PreRender

Элемент управления готов к рендерингу своего содержимого

Unload

Элемент управления выгружается из памяти

Начиная с ASP.NET 2.0 можно декларативно присвоить всем свойствам элемента управления значения, специфичные для конкретных браузеров. Вот небольшой пример разметки:

<asp:Button ID="btn" runat="server" Text="A button"

ie:Text="IE Button" mozilla:Text="Firefox Button" />

Свойство Text кнопки содержит значение "IE Button", когда страница выводится в Internet Explorer, и значение "Firefox Button", когда она выводится в Firefox. Если страницу запрашивает другой браузер, используется атрибут Text без префикса. Все свойства, которые разрешается задавать в составе тэга, можно помечать идентификатором браузера1. ASP.NET 2.0 поддерживает адаптивный рендеринг, то есть процесс генерирования разметки, производимый с учетом особенностей целевого браузера. Для поддержки адаптивного рендеринга задача генерирования разметки делегирована внешнему по отношению к элементу управления компоненту ‑ адаптеру. Выбор адаптера определяется возможностями целевого браузера, сведения о которых извлекаются из базы данных браузеров ASP.NET. Если запись об определенном браузере содержит имя класса адаптера элемента управления, создается и используется экземпляр этого класса. В противном случае адаптером элемента управления становится экземпляр класса ControlAdapter ‑ универсальный адаптер.

В ASP.NET 2.0 наряду с поддержкой состояния представления каждый элемент управления поддерживает состояние элемента управления (Control State). Оба состояния преследуют схожие цели – сохранение информации элемента между запросами. Основное отличие ‑ состояние элемента управления нельзя отключить программно или декларативно (т. е. оно всегда включено). Каждый элемент управления сохраняет и загружает свое состояние, используя пару виртуальных методов SaveControlState() и LoadControlState(). Состояние элемента управления используется подобно состоянию представления, сохраняется и загружается на тех же этапах, что и состояние представления, и содержится в том же скрытом поле.