Создание серверных элементов управления в Asp.net аналогично созданию элементов управления Windows Form. Существует несколько способов:
1. Пользовательский контроль
2. Пользовательские элементы управления, производные от Control и WebControl.
3. Расширение существующих серверных элементов управления Asp.net.
Пользовательские элементы управления имеют расширение .ascx и сохраняются в виде текстовых файлов. Пользовательские элементы управления не требуют предварительной компиляции, как серверные элементы управления, полученные из Control и WebControl. Когда пользовательские элементы управления используются на страницах .aspx, анализатор страниц запускается с класса . созданный из файла aspx и скомпилированный в сборку. Его преимущества: он решает проблему повторного использования кода, каждый пользовательский элемент управления имеет собственную объектную модель, а его язык написания не имеет ничего общего с языком страницы .aspx.
Расширение существующего управления сервером Asp.net, оно в основном расширяет функции встроенного управления сервером .net для удовлетворения потребностей наших разработчиков и конечных пользователей.
Пользовательские элементы управления, производные от Control и WebControl, развертываются в виде скомпилированных библиотек классов.
Вышеупомянутые 1 и 3 не будут объясняться в этой серии. В этой серии будут объяснены только серверные элементы управления, производные от Control и WebControl.
Если мы хотим написать собственный элемент управления, нам нужно только наследовать от Control, а WebControl реализовал интерфейс IComponent, а сам WebControl является производным от Control, поэтому они также поддерживают визуальное проектирование компонентов.
Метод Render и класс HtmlTextWriter Когда мы получаем серверный элемент управления Asp.net из класса Control, класс Control предоставляет нам перегружаемый Render и экземпляр типа HtmlTextWriter. Метод Render предназначен для отправки содержимого серверного элемента управления в предоставленный объект. HtmlTextWriter, а HtmlTextWriter инкапсулирует функцию записи текстового потока HTML.
использование системы; использование System.Collections.Generic; использование System.Text;
пространство имен ClassLibrary1 { общедоступный класс Control1: System.Web.UI.Control { защищенное переопределение void Render (писатель System.Web.UI.HtmlTextWriter) { Writer.Write("Я здесь."); } }
общедоступный класс Control2: System.Web.UI.WebControls.WebControl { защищенное переопределение void Render (писатель System.Web.UI.HtmlTextWriter) { Writer.Write("Я тоже здесь."); } } } |
В приведенном выше коде мы определяем Control1 и Control2, которые наследуются от Control и WebControl соответственно. Так в чем же существенные различия между ними? Сначала посмотрите на следующий эффект:
Из приведенных выше эффектов нетрудно увидеть разницу между ними. Класс WebControl обеспечивает поддержку стилей через атрибуты, такие как шрифт, высота, цвет фона и т. д. Итак, когда мы выбираем производное от Control, а когда — от WebControl? Если элемент управления хочет генерировать невизуальные элементы или отображать их для клиентов, не использующих HTML, он будет производным от Control, например SqlDataSource, если он должен предоставить клиенту визуальный HTML, тогда мы будем производным от WebControl, например TextBox; .