Из цикла лекций «Технологии разработки Internet-приложений» для студентов 4-го курса кафедры Компьютерных технологий физического факультета Донецкого национального университета Технологии разработки Internetприложений ASP.NET приложения – класс Control проф. В.К.Толстых, www.tolstykh.com Класс Control Предок всех серверных элементов управления (Web, HTML, пользовательских, специализированных…) Класс Control определён в пространстве имён System.Web.UI Основные потомки Control – это HtmlControl и WebControl Среди элементов управления могут встречаться как элементы-контейнеры (контейнеры именования, например , Panel , Table), которые могут содержать дочерние элементы (свойство Controls – содержимое коллекции контейнера), так и самостоятельные элементы, которые не подразумевают, что у них будут доступны дочерние элементы (например, Button). В момент генерации страницы происходит рекурсивный перебор всех элементов управления для генерации конечного HTML-кода, отправляемого пользователю. Основные свойства класса Control Свойство Описание ID Идентификатор, задаваемый программистом UniqueID Идентификатор, генерируемый системой на сервере на основе ID, если он был задан. Если элемент управления находится в другом элементе управления, то UniqueID содержит ID, сцепленное с именем контейнера именования (см. NamingContainer). ClientID Атрибута id и/или name в HTML, генерируемый для клиента на основе ID, если он был задан, иначе он принимает вид типа «_ctlиндекс» NamingContainer Возвращает ссылку на объект Контейнер именования (родительский элемент-контейнер). В контейнере именования к именам дочерних элементов добавляют префикс от родительских контейнеров, например, кнопка Btn на панели pnl может получить идентификатор UniqueID – ctrl0$pnl$Btn, а ClientID – ctrl0_pnl_Btn. Если этого не делать, то все составные элементы будут принадлежать непосредственно странице Page. Visible True или false – надо или не надо делать рендеринг элемента. Элемент может быть невидимым, но его свойства и методы будут доступны Controls Коллекция ссылок на дочерние элементы текущего элемента-контейнера Parent Возвращает ссылку на родительский элемент EnableViewState Указывает должен ли элемент сохранять своё состояние между запросами EnableTheming Указывает, применяются ли к элементу управления темы (таблицы стилей, рисунки, скины) SkinID Идентификатор обложки элемента. Обложка – множество конкретных значений атрибутов оформления элементов типа label, button… TemplateSource Directory Возвращает имя виртуального каталога текущей страницы Атрибут ClientIDMode (ASP.NET 4.0) Автоматическое формирование клиентских идентификаторов (ClientID) с учётом иерархии контейнеров может заметно усложнить разработку клиентской части приложения. При разработке клиентских стилей, скриптов необходимо заранее знать идентификаторы объектов. Например, следующий стиль #txtName { font-weight: bold; } придётся оформлять в виде #ctl00_content_txtName { font-weight: bold; } «Старый» способ преодоления такой проблемы может иметь вид: <script type="text/javascript"> var txtName = "<%= txtName.ClientID %>"; </script> Атрибут ClientIDMode получает или задает алгоритм создания значения свойства ClientID. Пример формирования статического идентификатора: <script type="text/javascript"> function f() { document.getElementById("SelectedSport").innerHTML =...; } </script> ... <asp:Label ID="SelectedSport" runat="server" ClientIDMode="Static"> </asp:Label> Значение атрибута ClientIDMode равное AutoID – это традиционное автоматическое формирование ClientID, Predictable – формирование ClientID с префиксом его контейнера (например, content_txtName), Inherit – наследует настройки ClientIDMode его родительского элемента управления. Значение ClientIDMode можно устанавливать и в директиве @Page Основные методы класса Control Метод Описание ApplayStyleSheetSkin Применяет обложку в соответствии со SkinID DataBind Вызывает для всех дочерних элементов управления метод DataBind связывания с БД Dispose Выполняет задачи очистки для элемента управления перед его удалением Focus Передаёт фокус ввода элементу управления FindControl Ищет заданный элемент управления в коллекции дочерних HasControls Указывает, имеет ли элемент управления дочерние элементы RenderControl Делает рендеринг элемента управления ResolveClientURL Определяет URL для клиента, чтобы он мог использовать ресурсы сервера (страницы, рисунки…) ResolveURL Возвращает абсолютный URL События класса Control Событие Описание DataBinding Связывание элемента с БД Disposed Удаление элемента управления из памяти Init Инициализация элемента управления Load Загрузка в память инициализированного элемента управления PreRender Элемент управления готов к рендерингу, вызывается метод RenderControl Unload Элемент управления выгружается из памяти