Чтение онлайн

на главную - закладки

Жанры

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

Обычно для разработки специального элемента управления требуется больше времени, чем для элемента управления пользователя, так как синтаксис является более сложным и часто требуется написать значительно больший код, чтобы получить результат. Элемент управления пользователя, как мы видели, может просто объединять несколько других элементов управления, в то время как специальный элемент управления может делать практически что угодно.

Чтобы получить наиболее гибкое поведение специальных элементов управления, можно выводить класс из

System.Web.UI.WebControls.WebControl
. В этом случае создается полный специальный элемент управления. Иначе можно расширить функциональность
существующего элемента управления, создавая производный специальный элемент управления. Наконец, можно сгруппировать существующие элементы управления почти так, как это делалось в предыдущем разделе, но с более логичной структурой, чтобы создать композитный специальный элемент управления:

Любой из этих элементов может использоваться на страницах ASP.NET одинаково. Необходимо только поместить созданную сборку в каталог

bin
приложения Web, которое будет его использовать, и зарегистрировать имена используемых элементов с помощью директивы
<%@ Register %>
. В этой директиве применяется немного другой синтаксис для специальных элементов управления:

<%@ Register TagPrefix="PCS" Namespace="PCSCustomWebControls" Assembly="PCSCustomWebControls" %>

Мы используем параметр

TagPrefix
таким же образом, как и раньше, но не используем атрибуты
TagName
или
Src
. Это связано с тем, что сборка специального элемента управления может содержать несколько специальных элементов управления, и каждый из них будет именован согласно своему классу, поэтому
TagName
является лишним. Кроме того, так как сборка находится в каталоге
bin
, мы можем использовать средства платформы .NET для динамического обнаружения требуемой сборки просто по имени и пространству имен в ней, которое содержит элементы управления.

Выше, в примере строки кода, мы говорим, что хотим использовать сборку с именем

PCSCustomWebControls.dll
с элементами управления в пространстве имен
PCSCustomWebControls
, и при этом используем префикс
PCS
. Если в этом пространстве имен имеется элемент управления с именем
Control1
, то можно использовать его с кодом ASP.NET:

<PCS:Control1 Runat="server" ID="MyControl" />

С помощью специальных элементов управления можно также воспроизвести некоторое вложенное поведение элементов управления, такое, как мы видим в списке элементов управления:

<asp:dropdownlist id="roomList" runat="server" width="160px">

 <asp:ListItem Value="1">The Happy Room</asp:ListItem>

 <asp:ListItem Value="2">The Angry Room</asp:ListItem>

 <asp:ListItem Value="3">The Depressing Room</asp:ListItem>

 <asp:ListItem Value="4">The Funked Out Room</asp:ListItem>

</asp:dropdownlist>

Можно создать очень похожим образом элементы управления, которые интерпретируются как потомки других элементов управления. Позже в этой главе мы увидим, как это делается.

Конфигурация проекта специального элемента управления

Применим часть этой теории на практике. Мы будем использовать для простоты единственную сборку для хранения всех специальных элементов управления примера этой главы, которую можно создать в Visual Studio.NET, выбирая

новый проект типа Web Control Library. Назовем нашу библиотеку
PCSCustomWebControls
:

Здесь проект создан в каталоге

wwwroot
, хотя это и не обязательно. Библиотеки элементов управления Web можно создавать где угодно, необходимо только скопировать созданную сборку в каталог
bin
приложения Web, которое ее использует.

Один из технических приемов, применяемых для упрощения тестирования одиночного решения, состоит в добавлении проекта приложения Web к тому же решению:

В данный момент это единственное приложение, которое будет использовать нашу библиотеку специального элемента управления, поэтому для ускорения работы определим, что выводимая сборка библиотеки создается в правильном каталоге

bin
(то есть нам не нужно копировать файл после каждой перекомпиляции). Это можно сделать с помощью страниц свойств проекта
PCSCustomWebControls
:

Отметим, что здесь в раскрывающемся списке Configuration выбран элемент All Configurations, поэтому отладочная и окончательная сборка будут помещены в одном месте. Output Path был изменен на C:\Inetpub\wwwroot\PCSCustomWebControlsTestApp\bin Чтобы облегчить отладку можно также изменить значение Start URL на странице свойств Debugging наa Debug Mode - на URL таким образом, чтобы увидеть результаты, проект можно выполнять просто в режиме отладки.

Убедимся, что все это работает, протестировав элемент управления, который поставляется по умолчанию в файле

.cs
для библиотеки специального элемента управления, называемой
WebCustomControl1
. Нам нужно внести следующие изменения в код
WebForm1.aspx
, который просто ссылается на вновь созданную библиотеку элемента управления и встраивает используемый по умолчанию элемент из этой библиотеки в тело страницы:

<%@ Page language="c#" Codebehind="WebForm1.aspx.cs"

 AutoEventWireup="false" Inherits="PCSCustomWebControlsTestApp.WebForm1" %> 

<%@ Register TagPrefix="PCS" Namespace="PCSCustomWebControls"

 Assembly="PCSCustomWebControls" %>

<html>

 <head>

<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">

<meta name="CODE_LANGUAGE" Content = "C#">

<meta name=vs_defaultClientScript content="JScript">

<meta name=vs_targetSchema content="Internet Explorer 5.0">

 </head>

 <body MS_POSITIONING="GridLayout">

<form id="WebForm1" method="post" runat="server">

<PCS:WebCustomControl1 Runat="server" Text="Testing again..." />

</form>

 </body>

Поделиться:
Популярные книги

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Маленькая хозяйка большого герцогства

Вера Виктория
2. Герцогиня
Любовные романы:
любовно-фантастические романы
7.80
рейтинг книги
Маленькая хозяйка большого герцогства

Законы Рода. Том 10

Flow Ascold
10. Граф Берестьев
Фантастика:
юмористическая фантастика
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 10

Возмездие

Злобин Михаил
4. О чем молчат могилы
Фантастика:
фэнтези
7.47
рейтинг книги
Возмездие

Кровь эльфов

Сапковский Анджей
3. Ведьмак
Фантастика:
фэнтези
9.23
рейтинг книги
Кровь эльфов

Последний наследник

Тарс Элиан
11. Десять Принцев Российской Империи
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний наследник

Газлайтер. Том 4

Володин Григорий
4. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 4

Бастард

Осадчук Алексей Витальевич
1. Последняя жизнь
Фантастика:
фэнтези
героическая фантастика
попаданцы
5.86
рейтинг книги
Бастард

Князь

Шмаков Алексей Семенович
5. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
сказочная фантастика
5.00
рейтинг книги
Князь

Жестокая свадьба

Тоцка Тала
Любовные романы:
современные любовные романы
4.87
рейтинг книги
Жестокая свадьба

Идеальный мир для Лекаря 14

Сапфир Олег
14. Лекарь
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 14

Последняя Арена 11

Греков Сергей
11. Последняя Арена
Фантастика:
фэнтези
боевая фантастика
рпг
5.00
рейтинг книги
Последняя Арена 11

Болотник 3

Панченко Андрей Алексеевич
3. Болотник
Фантастика:
попаданцы
альтернативная история
6.25
рейтинг книги
Болотник 3

Черный Маг Императора 10

Герда Александр
10. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 10