|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
8. Создание пользовательских элементов управленияПользовательские элементы управления в ASP.NET 2.0, страницы .ascx, повторное использование кода HTML В ASP.NET в добавление к встроенным элементам управления, которые мы уже рассмотрели, вы можете также создавать пользовательские элементы управления. Пользовательский элемент управления (ПЭУ) - это Web-страница, которую можно разместить в качестве элемента управления на другой Web-странице. Возможности - такие же, как и встроенных элементах управления: пользовательский интерфейс и другая функциональность. После создания ПЭУ его можно использовать на любой странице вашего Web-приложения. У ПЭУ в ASP.NET - всегда расширение .ASСX. Они очень похожим на обычные Web-страницы (Web-формы): в них есть код HTML, который можно редактировать, и программный код на страницах codebehind. Они точно также компилируются при первом обращении к ним. Главное отличие - к страницам ПЭУ нельзя обращаться из броузера напрямую (это просто запрещено в ASP.NET по соображениям безопасности) - только через обычные страницы, на которых они размещены. В ПЭУ нет тегов <HEAD>, <BODY> и <FORM>. Событийные процедуры (в том числе Page_Load) работают для них как обычно. Страница codebehind определяется в ПЭУ не тегом @Page, как на обычной странице, а в теге @Control, например: <%@ Control Language="vb" Codebehind="WebUserControl1.ascx.vb" Inherits="test.WebUserControl1" %> В теге @Control поддерживаются те же атрибуты, что и в @Page, за исключением AspCompat и Trace. Трассировка для ПЭУ включается на уровне страницы, на которую он помещен. Главное назначение ПЭУ - повторное использование кода. Обычные примеры применения - колонтитулы для страниц, navigation bars, другие повторяющиеся блоки кода. В обычном ASP для подобных ситуаций использовались конструкции Include. ПЭУ призваны заменить их в ASP.NET. Преимущества ПЭУ: · ПЭУ - self-contained (сами в себе), то есть имена переменных, методов и свойств конфликтовать не будут; · на одной обычной странице один и тот же ПЭУ может использоваться многократно без каких-либо проблем и конфликтов; · в ПЭУ и обычной странице могут использоваться разные языки для кода. ПЭУ нельзя использовать в другом Web-приложении (вначале нужно его скопировать). Если нужно реализовать повторное использование кода в разных Web-приложениях, нужно создавать Web custom controls. Они пишутся намного сложнее, и, в частности, в дизайнере их создать нельзя - только через код. В этом курсе они рассматриваться не будут. Разместить ПЭУ можно на любой обычной Web-странице ASP.NET. Страница, на которой размещен ПЭУ, по отношению к этому ПЭУ называется хост-страницей. Чтобы разместить ПЭУ на хост-странице, его вначале нужно зарегистрировать на этой странице при помощи директивы @Register. Эта директива может выглядеть так: <%@ Register TagPrefix="demo" TagName="validNum" Src="numberbox.ascx" %> TagPrefix - уникальное пространство имен для ПЭУ (говоря проще, уникальный идентификатор этого ПЭУ, чтобы можно было несколько ПЭУ одного типа размещать на одной странице). TagName - уникальное имя этого типа ПЭУ. Src - путь к ПЭУ (от корня Web-приложения). После регистрации ПЭУ можно добавлять на Web-страницу как обычные элементы управления: <demo:validNum id="num1" runat="server"/> <demo:validNum id="num2" runat="server"/> В данном случае добавлено два ПЭУ одного типа validNum. Как добраться до свойств ПЭУ в событийных процедурах хост-страницы? Вначале нужно объявить переменную для этого ПЭУ на хост-странице: Protected num1 As numberbox numberbox должно соответствовать типу ПЭУ, а имя переменной (num1) - должно быть точно таким же, как его ID в теге помещения элемента на страницу. Далее можно получать значения свойств: lblSum.Text = (num1.pNum + num2.pNum).ToString() или их присваивать: num1.pNum = 5 Создать ПЭУ можно с нуля или можно преобразовать в ПЭУ существующую Web-страницу. С нуля создать очень просто: в контекстном меню для проекта выбрать Add -> Add Web User Control и определить имя для ПЭУ. Затем - добавляем, как на обычную страницу элементы управления и определяем для них событийные процедуры. А затем - этап, уникальный для ПЭУ: нужно создать свойства, которые будут использоваться для взаимодействия с Web-страницей. Например, для создания свойства, которое позволит хост-странице считывать и устанавливать значение текстового поля txtNum в ПЭУ, код может быть таким: Public Property pNum() As Integer Get Return CInt(txtNum.Text) End Get Set(ByVal Value As Integer) txtNum.Text = Value.ToString() End Set End Property Свойство ПЭУ, доступное для хост-страницы, будет называться pNum. Точно также создаются Public методы в ПЭУ (они будут доступны из хост-страницы как методы соответствующего объекта). Для конвертации существующей Web-страницы надо: 1) убрать из нее теги <HTML>, <BODY> и <FORM>. 2) Заменить директиву @Page на @Control. Проверить, что нет атрибутов, которые не поддерживаются в @Control. 3) добавить атрибут ClassName в директиву @Control (этот атрибут позволит обращаться к ПЭУ из хост-странице как к объекту класса с именем, указанным в этом атрибуте). 4) переименовать страницу, поменяв расширение *.aspx на *.ascx.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Получить учебные материалы по этому курсу |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||