Применение пользовательского элемента управления «форма»

В тэг <div> встроена поддержка анализа дочерних тэгов, которую можно заимствовать, создавая новый класс по механизму наследования. На сер­верной стороне тэгу <div> соответствует универсальный класс HtmlGene-ricControl. Он универсален потому, что его программный интерфейс не привязан к особенностям элемента управления <div>. С помощью этого класса ASP.NET отображает множество HTML-тэгов с атрибутом runat. К универсальным элементам относятся <div>, <Йont>, <span> и <bodv.>. На рис. 8 показан исходный код класса MsdnMag.Form, производный от HtmlGenericControl. По умолчанию конструктор HtmlGenericControl со­здает тэг <span>. Если вам нужен другой HTML-контейнер, используйте подходящую перегруженную версию конструктора:

public class Form : HtmlGenericControl, INamingContainer I

public Form( ai ling tag) :  base. "cJiv")


{...}


Когда пользователь щелкает кнопку передачи на логической форме, вызы­вается предопределенный метод Submit. Он просматривает все элементы ввода на логической форме и копирует их значения в НТТР-контекс Ў. Интерфейс INamingContaincr гарантирует, что в контекст будут загруже­ны только элементы управления, принадлежащие логической форме. INa-mingContainer является маркирующим интерфейсом (marker interface), т. е. никакие его методы в классе не реализуются. Однако класс, раскры­вающий этот интерфейс, может рассчитывать на особое отношение со сто­роны инфраструктуры ASP.NET. В частности, к идентификаторам дочер­них элементов управления добавляется идентификатор родительского.

Как и в случае с пользовательскими элементами управления (базовый класс UserCoiu.ro! сам реализует INamingContainer), можно проверять первую часть имени дочерних элементов, включенных в набор Requ-и отбирать из них только те, которые содержатся в логической форме. Заметьте, что эту информацию можно получить и другим путем.