Книга: C# для профессионалов. Том II
Построитель элемента управления StrawPoll
Построитель элемента управления StrawPoll
Теперь мы рассмотрим, как можно транслировать код ASP.NET каждого варианта выбора в элемент управления, который является потомком элемента управления StrawPoll
. Чтобы сделать это, необходимо ассоциировать построитель элемента управления с классом StrawPoll
с помощью атрибута ControlBuilderAttribute
. Нам нужно также определить, что элементы управления-потомки не должны анализироваться никаким другим способом с помощью атрибута ParseChildren
:
[ControlBuilderAttribute(typeof(StrawPollControlBuilder)) ]
[ ParseChildren(false) ]
public class StrawPoll : System.Web.UI.WebControls.WebControl, INamingContainer { }
Здесь используется класс с именем StrawPollControlBuilder
, определенный следующим образом:
internal class StrawPollControlBuilder : ControlBuilder {
public override Type GetChildControlType(string tagName, IDictionary attribs) {
if (tagName.ToLower().EndsWith("option")) return typeof(Option);
return null;
}
public override void AppendLiteralString(string s) {
// ничего не делать, чтобы избежать добавления встроенного текста
// к элементу управления
}
}
Здесь мы переопределяем метод GetChildControlType()
базового класса ControlBuilder
чтобы он возвращал тип класса Option
в ответ на тег с именем <Option>
. Фактически, чтобы все работало в максимальном количестве ситуаций, мы ищем любое имя тега, которое оканчивается строкой "option"
с буквами в верхнем или нижнем регистре.
Мы переопределяем также метод AppendLiteralString()
так, чтобы любой промежуточный текст, включая пробелы, игнорировался и не вызывал никаких проблем.
Когда это сделано в предположении, что в StrawPoll
нет никаких других элементов управления, мы будем иметь все элементы управления Option
содержащимися в коллекции Controls
из StrawPoll
. Эта коллекция не будет содержать никаких других элементов управления.
Отметим, что построитель элементов управления использует коллекцию атрибутов. Чтобы использовать это добавим следующую инструкцию using
в пространство имен:
using System.Collections;
- Элемент управления Option
- Элемент управления выборочным опросом
- Основные "рычаги" управления производительностью
- Категорийный менеджмент. Курс управления ассортиментом в рознице
- Письма с элементами графики и вложениями
- 1. Системы управления базами данных
- 4.8 Методы управления Fibre Channel
- 7.9 Будущее управления хранилищами по версии ассоциации SNIA: стандарты SMI
- 15.1.3. Обработка сигналов управления заданиями
- Группа управления конфигурацией ПО
- Системные вызовы управления процессорной привязкой
- Глава 2 Комбинированная система управления