Основы ASP.NET 2.0

       

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


Серверные элементы управления, унаследованные от WebControl или Control, сложнее создавать, но у них еще больше возможностей. Такие элементы имеют собственные методы генерации HTML-кода. Сложность в том, что здесь класс полностью описывается программистом, без визуального дизайна и файла ascx. В классе WebControl определены визуальные свойства, такие как BackColor, Font, ToolTip. В них можно определить сложную логику пользовательского интерфейса. Если элемент управления не нуждается в таких свойствах, его нужно наследовать от Control. При этом он генерирует HTML-код, например теги <meta> или скрытые элементы.

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

Серверные элементы управления помещаются в библиотеки WebControls. Чтобы создать библиотеку, в меню File выберите New Project, и в появившемся диалоге — тип проекта Web Control Library (он находится в узле Visual C#-Windows). В проекте уже создан простейший серверный элемент управления. Библиотеку можно создать только в Visual Studio, а в VWD — только класс в папке App_Code:

namespace WebControlLibrary1 { [DefaultProperty("Text")] [ToolboxData("<{0}:WebCustomControl1 runat=server></{0}:WebCustomControl1>")] public class WebCustomControl1 : WebControl { [Bindable(true)] [Category("Appearance")] [DefaultValue("")] [Localizable(true)] public string Text { get { String s = (String)ViewState["Text"]; return ((s == null) ? String.Empty : s); }


set { ViewState["Text"] = value; } }

protected override void RenderContents(HtmlTextWriter output) { output.Write(Text); } } }

У этого элемента всего одно свойство Text, и он просто записывает в поток вывода страницы HTML значение этого свойства.

Если в решении есть проект с библиотекой пользовательских элементов, они автоматически добавляются в инструментальную панель (Toolbox). Для этого достаточно всего лишь скомпилировать проект. В папке Bin появляется WebControlLibrary1.dll. Это сборка, в которой находятся все элементы управления библиотеки.

Если вы работаете не с Visual Studio, все равно можно откомпилировать классы в сборку .dll из командной строки1).

csc /t:library /out: WebControlLibrary1.dll /r:System.dll /r:System.Web.dll *.cs

В панели инструментов появится новая секция со значками-шестеренками, и элементы управления можно перетаскивать оттуда на страницы.

Директива Register, которая автоматически добавляется, будет содержать название этой сборки и пространство имен, в котором находится элемент управления:

<%@ Register Assembly="WebControlLibrary1" Namespace="WebControlLibrary1" TagPrefix="cc1" %>

Чтобы не писать одну и ту же директиву на многих страницах, библиотеку можно зарегистрировать в файле web.config.

У созданного элемента, кроме свойства Text, есть все свойства внешнего вида и поведения, как у стандартных элементов управления, как вы можете убедиться, открыв его окно свойств. Он очень похож на элемент Label.

Доступ к сборке WebControlLibrary1.dll можно предоставить всем приложениям, если поместить ее в глобальный кэш сборок.


Содержание раздела