ASP.NET позволяет пользователям создавать элементы управления. Эти определяемые пользователем элементы управления классифицируются как:
пользовательский контроль
Пользовательские элементы управления
Пользовательские элементы управления ведут себя как миниатюрные страницы ASP.NET или веб-формы, которые могут использоваться многими другими страницами. Они являются производными от класса System.Web.UI.UserControl. Эти элементы управления имеют следующие свойства:
Они имеют расширение .ascx.
Они не могут содержать каких-либо тегов или тегов.
У них есть директива Control вместо директивы Page.
Чтобы понять эту концепцию, давайте создадим простой пользовательский элемент управления, который будет служить нижним колонтитулом веб-страницы. Чтобы создать и использовать пользовательские элементы управления, выполните следующие действия:
Создайте новое веб-приложение.
Щелкните правой кнопкой мыши папку проекта в обозревателе решений и выберите «ДОБАВИТЬ новый элемент».
Выберите «Контроль веб-пользователей» в диалоговом окне «Добавить новый элемент» и назовите его footer.ascx. Изначально footer.ascx содержит только директиву Control.
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="footer.ascx.cs" Inherits="customcontroldemo.footer" %>
Добавьте в файл следующий код:
<table> <tr> <td align="center"> Авторские права © TutorialPoints Ltd., 2010 г.</td> </tr> <tr> <td align="center"> Местоположение: Хайдарабад, AP </td> </ tr></таблица>
Чтобы добавить пользовательский элемент управления на веб-страницу, необходимо добавить директиву Register и экземпляр пользовательского элемента управления страницы. Следующий код показывает инструкции:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="customcontroldemo._Default" %><%@ Register Src="~/footer.ascx" TagName="footer" TagPrefix="Tfooter" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" > < head runat="server"> <title> Страница без названия </title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="Label1" runat="server" Text="Добро пожаловать в учебные пособия по ASP.Net "></asp:Label> <br /> <br /> <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text ="Информация об авторских правах" /> </div> <Tfooter:footer ID="footer1" runat="server" /> </form> </body></html>
При выполнении отображается нижний колонтитул страницы, и элемент управления доступен на всех страницах вашего сайта.
Соблюдайте следующее:
(1) Команда Register указывает имя метки и префикс метки для элемента управления.
<%@ Register Src="~/footer.ascx" TagName="footer" TagPrefix="Tfooter" %>
(2) При добавлении пользовательских элементов управления на страницу следует использовать следующие имена тегов и префиксы:
<Tfooter:footer ID="footer1" runat="server" />
Пользовательские элементы управления развертываются как отдельные коллекции. Они компилируются в библиотеки динамической компоновки (DLL) и используются как любой другой элемент управления службой ASP.NET. Их можно создать любым из следующих способов:
Получая пользовательский элемент управления из существующего элемента управления.
Создайте новый пользовательский элемент управления, объединив два или более существующих элементов управления.
Получив его из базового класса управления.
Чтобы понять эту концепцию, давайте создадим собственный класс, который будет просто отображать текстовое сообщение в браузере. Для создания элемента управления выполните следующие действия:
Создайте новый веб-сайт. Щелкните правой кнопкой мыши решение (не проект) в верхней части дерева в обозревателе решений.
В диалоговом окне «Новый проект» выберите «Серверный элемент управления ASP.NET» из шаблона проекта.
Вышеупомянутые шаги добавляют новый проект и создают полный настраиваемый элемент управления для решения под названием ServerControl1. В этом примере позвольте мне назвать проект CustomControls. Чтобы использовать этот элемент управления, его необходимо добавить в качестве ссылки на веб-страницу перед регистрацией на ней. Чтобы добавить ссылку на существующий проект, щелкните правой кнопкой мыши проект (не решение) и выберите «Добавить ссылку».
Выберите проект CustomControl на вкладке «Проекты» диалогового окна «Добавить ссылку». Обозреватель решений может отображать ссылки.
Чтобы использовать элемент управления на странице, добавьте директиву Register под директивой @Page.
<%@ Register Assembly="CustomControls" Namespace="CustomControls" TagPrefix="ccs" %>
Более того, вы можете использовать элементы управления, как и любой другой элемент управления.
<form id="form1" runat="server"> <div> <ccs:ServerControl1 runat="server" Text = "Я являюсь пользовательским серверным элементом управления" /> </div> </form>
При выполнении свойство Text элемента управления отображается в браузере, как показано ниже:
В предыдущем примере было установлено значение свойства Text пользовательского класса. ASP.NET добавляет это свойство по умолчанию при создании элемента управления. Об этом свидетельствует следующий код после файла элемента управления.
используя System;используя System.Collections.Generic;используя System.ComponentModel;используя System.Linq;используя System.Text;используя System.Web;используя System.Web.UI;используя System.Web.UI.WebControls;пространство имен CustomControls{ [ DefaultProperty("Text")] [ToolboxData("<{0}:ServerControl1 runat=server></{0}:ServerControl1 >")] public класс ServerControl1 : WebControl { [Bindable(true)] [Category("Appearance")] [DefaultValue("")] [Localizable(true)] public string Text { get { String s = (String)ViewState["Text"] ; return ((s == null) ? "[" + this.ID + "]" : s } set { ViewState["Text"] = value; } } защищенное переопределение void RenderContents (выход HtmlTextWriter) {output.Write(Text) }};
Приведенный выше код автоматически генерируется для пользовательского элемента управления. События и методы можно добавлять в пользовательские классы элементов управления.
Давайте расширим предыдущий пользовательский элемент управления с именем ServerControl1. Давайте дадим ему метод под названием checkpalindrome, который даст ему разрешение проверять палиндром.
Палиндром — это слово/буквенное значение, которое в перевернутом виде по-прежнему пишется одинаково. Например, малаялам, мадам, сара и т. д.
Расширьте код вашего пользовательского элемента управления, и он должен выглядеть так:
используя System;используя System.Collections.Generic;используя System.ComponentModel;используя System.Linq;используя System.Text;используя System.Web;используя System.Web.UI;используя System.Web.UI.WebControls;пространство имен CustomControls{ [ DefaultProperty("Text")] [ToolboxData("<{0}:ServerControl1 runat=server></{0}:ServerControl1 >")] public класс ServerControl1 : WebControl { [Bindable(true)] [Category("Appearance")] [DefaultValue("")] [Localizable(true)] public string Text { get { String s = (String)ViewState["Text"] ; return ((s == null) ? "[" + this.ID + "]" : s } set { ViewState["Text"] = value; } } protected override void RenderContents(HtmlTextWriter output) { if (this.checkpanlindrome()) { output.Write("Это палиндром: <br />"); output.Write("<FONT size=5 color=Blue >"); output.Write("<B>"); output.Write(Text); output.Write("</B>"); output.Write("</FONT>"); } else { output.Write("Это не палиндром: <br />"); output.Write("<FONT size=5 color=red>"); вывод.Write("<B>"); вывод.Write(Text); вывод.Write("</B>"); вывод.Write("</FONT>"); if (this.Text != null) { String str = this.Text; String strtoupper = Text.ToUpper(); char[] rev = strtoupper.ToCharArray(); Array.Reverse(rev); String strrev = new String( rev); если (strtoupper == strrev) {вернуться верно; еще {вернуть ложь} } еще {вернуть ложь; } }}
При изменении кода пространства необходимо создать метод, нажав «Создать» -> «Построить решение», чтобы изменения можно было отразить в вашем проекте. Добавьте на страницу текстовое поле и кнопку управления, чтобы пользователь мог ввести фрагмент текста. Когда кнопка нажата, она используется для проверки палиндрома.
<form id="form1" runat="server"> <div> Введите слово: <br /> <asp:TextBox ID="TextBox1" runat="server"> </asp:TextBox> <br /> < br /> <asp:Button ID="Button1" runat="server onclick="Button1_Click" Text="Проверить палиндром" /> <br /> <br /> <ccs:ServerControl1 ID="ServerControl11" runat="server" Text = "" /> </div></form>
Обработчик событий Click кнопки просто копирует текст из текстового поля в свойство text настраиваемого элемента управления.
protected void Button1_Click(object sender, EventArgs e){ this.ServerControl11.Text = this.TextBox1.Text;}
При выполнении элемент управления успешно обнаруживает палиндромы.
Соблюдайте следующее:
(1) Когда вы добавляете ссылку на пользовательский элемент управления, он добавляется в панель инструментов, и вы можете использовать его непосредственно из панели инструментов, как и другие элементы управления.
(2) Метод RenderContents класса пользовательского элемента управления был переопределен, и вы можете добавлять свои собственные методы и события.
(3) Метод RenderContents принимает параметр типа HtmlTextWriter, который будет отвечать за его отображение в браузере.