Власні елементи управління в ASP .NET

Доброї пори часу :). В цій статті, ви зможете прочитати про те, як створювати власні елементи управління в ваших програмах, які використовують технологію ASP .NET. Стаття буде короткою і не займе в вас багато часу.

Власноруч створені елементи управління, які я покажу як робити нижче, створюються і використовуються для того, щоб можна було:

  1. Повторно їх використовувати.
  2. Інкапсулювати певні операції, що дозволить маніпулювати функціональністю з додатковим рівнем ієрархії.
  3. Скомбінувати інші елементи управління, як можуть бути взаємозалежними.

Створіть ASP .NET проект та відразу в вікні “Solution Explorer” натисніть праву кнопку миші і виберіть Add->New Item:

Мал .1.1

Після цього у вікні вибору готових шаблонів файлів виберіть Web User Control, назвіть його RequiredTextBox та натисніть Add:

Мал .1.2

Після чого цей файл, з розширенням .ascx автоматично відкриється, і ви побачите наступний його вміст:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ReqiredTextBox.ascx.cs" Inherits="Sample.ReqiredTextBox" %>

Як ви вже помітили, атрибут CodeBehind вказує на файл з кодом, який буде містити серверну функціональність цього елементу управління. Якщо ви натиснете F7, ви зможете його переглянути:

public partial class ReqiredTextBox : System.Web.UI.UserControl
{
   protected void Page_Load(object sender, EventArgs e)
   {
   }
}

Клас RequiredTextBox унаслідується від класу UserControl, який поставляється з ASP .NET, так само можна побачити, що він автоматично має прикріпленого обробника події Load класу Page.

Підказка: метод Page_Load в елементі управління буде запущений після того, як він буде запущений в елемента, який його містить. Тобто, якщо елемент управління знаходиться на сторінці, то спочатку він буде запущений в обробнику події цієї сторінки (якщо він існує), а потім вже в самого елементу управління.

Повернемось тепер до розмітки елементу управління. Ви напевно здогадались, що в неї можна добавляти звичайні html елементи та ASP .NET елементи. В нашому прикладі я добавлю елемент TextBox з валідатором, який буде перевіряти, чи користувач ввів якусь інформацію:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ReqiredTextBox.ascx.cs" Inherits="Sample.ReqiredTextBox" %>
<asp:TextBox ID="textbox" runat="server" />
<asp:RequiredFieldValidator ID="rvTextbox" runat="server" ErrorMessage="*" ControlToValidate="textbox" />

Тепер ми маємо елемент управління, який є обов’язковим для заповнення. Можна його розміщати на будь-якій сторінці. В цьому випадку він буде розміщений на сторінці Default:

<%@ Register TagPrefix="controlLib" TagName="ReqiuredTextBox" Src="~/ReqiredTextBox.ascx" %>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
   <controlLib:ReqiuredTextBox ID="requiredTextBox" runat="server" />
</asp:Content>

Як ви бачите, спочатку його потрібно зареєструвати на сторінці, вказати шлях, префікс та назву, за допомогою яких ми зможемо розміщати елемент управління.

Добавте ось таку кнопку:

<asp:Button ID="btnSubmit" runat="server" CausesValidation="true" Text="Submit" />

Скомпілюйте та запустіть ваш сайт, після чого спробуйте цю кнопку натиснути. В результаті форма не піде на відправлення, бо текст не був введений в елемент управління.

Тепер варто добавити, що ви можете добавляти свої властивості в елемент управління, які можуть бути налаштовані як декларативно, так і програмно:

public partial class ReqiredTextBox : System.Web.UI.UserControl
{
   public String Text
   {
      get { return textbox.Text; }
      set { textbox.Text = value; }
   }
}

В цьому коді я добавив властивість, яка встановлює або повертає текст з внутрішнього елементу управління TextBox. Відповідно текст введений користувачем можна отримати під час обробки події кнопки Submit:

protected void btnSubmit_Click(object sender, EventArgs e)
{
   String text = requiredTextBox.Text;
}

А ось так можна в розмітці встановити цю властивість:

<controlLib:ReqiuredTextBox ID="requiredTextBox" runat="server" Text="Hello" />

Думаю цього достатньо для розуміння того, як можна створювати власні елементи управління в ASP .NET. Також хотів сказати, що існує ще один тип елементів управління, який розміщується в окремих збірках та будується динамічно, але в цій статті я його описувати не буду.

Всього найкращого :).

Скачати приклад коду

Advertisements

, , ,

  1. #1 by Ivan on March 30, 2012 - 10:52

    🙂 норм

  1. Page not found « Blog by Serhiy Shumakov

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: