Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Проверочные группы




В ASP.NET 1.0 проверка элемента управления происходила по принципу «все или ничего». Например, если на форме имеется набор полей и проверочных элементов, а также две кнопки, какую бы из них ни щелкнул пользователь, всегда будут проверяться все элементы управления. Иными словами, нельзя проверить одни элементы управления с помощью одной кнопки, а другие ‑ с помощью другой. Воспользовавшись свойством CausesValidation кнопки, можно вовсе отключить проверку, но это не решает проблемы.

В ASP.NET 2.0 введено новое свойство ‑ ValidationGroup. Оно имеется у проверочных элементов, элементов управления input-типа и кнопок. Пользоваться этим свойством просто: достаточно задать один и тот же идентификатор группы для выбранных проверочных элементов, и этот же идентификатор присвоить свойству ValidationGroup кнопки, с помощью которой будет выполняться активизация указанных элементов. Вот пример кода:

<asp:TextBox ID="tbx1" runat="server" />

<asp:RequiredFieldValidator ID="reqValidator1" runat="server"

ValidationGroup="Group1" ControlToValidate="tbx1"

ErrorMessage="tbx1 is mandatory" />

 

<asp:TextBox ID="tbx2" runat="server" />

<asp:RequiredFieldValidator ID="reqValidator2" runat="server"

ValidationGroup="Group2" ControlToValidate="tbx2"

ErrorMessage="tbx2 is mandatory" />

 

<asp:Button ID="btn1" runat="server" Text="Check Group1"

ValidationGroup="Group1" />

<asp:Button ID="btn2" runat="server" Text="Check Group2"

ValidationGroup="Group2" />

Здесь два элемента управления RequiredFieldValidator принадлежат к разным проверочным группам – Group1 и Group2. Первая кнопка служит для проверки элементов управления из группы Group1, а вторая ‑ для проверки элементов из группы Group2. Действуя таким же образом, процесс проверки можно сделать сколь угодно гранулярным.

5.11. Эталонные страницы и темы

Для простого пользователя сети Интернет основное отличие одного сайта от другого заключается в разнообразном дизайне страниц. Прежде чем встретится с функциональными возможностями веб-приложения, посетитель сайта оценивает, нравится ли ему внешний вид страниц. Поэтому дизайн страниц является едва ли менее важным, чем общая функциональность.

Задача разработчика писать код, а задача художника-дизайнера заниматься внешним оформлением и версткой HTML-кода страниц. При этом в большинстве случаев необходимо обеспечить возможность параллельной работы над кодом приложения и HTML-шаблоном. С этим весьма успешно справлялась технология Code Behind. Но при этом при работе над каждой страницей разработчику приходится ‑ так или иначе ‑ сталкиваться с разметкой страницы.

Стоит заметить, что большинство современных сайтов имеют сходный внешний вид всех страниц, и каждая страница имеет общие элементы дизайна. В ASP.NET 1.0 общие элементы дизайна заключали в пользовательские элементы управления и включались в каждую страницу. Либо, наоборот, страницы преобразовывали в элементы управления, используя одну страницу в качестве основы, в которую загружали элементы управления в зависимости от URL.

ASP.NET 2.0 предлагает новый подход разработки единообразных страниц, осованный на понятии эталонной страницы. Эталонная страница (Master page) представляет собой обычную страницу ASP.NET, обладающую несколькими дополнительными свойствами и содержащую один или несколько специальных элементов управления ContentPlaceHolder. Эти элементы определяют области, в которые обычные страницы помещают свое содержимое.

Рассмотрим пример файла эталонной страницы MainMaster.master.

<%@ Master Language="C#" CodeFile="MainMaster.master.cs"

Inherits="MainMaster_master" %>

<html>

<head>

<title> My Homepage</title>

</head>

<body>

<table width="100%">

<tr>

<span ID="PageTitle" runat="server" />

</tr>

<tr>

<table width="100%">

<tr>

<td>

<asp:ContentPlaceHolder ID="PageMenu" runat="server"/>

</td>

<td>

<form ID="Form1" runat="server">

<asp:ContentPlaceHolder ID="Content" runat="server"/>

</form>

</td>

</tr>

</table>

</tr>

</table>

</body>

</html>

Эталонная страница MainMaster.master содержит два элемента управления ContentPlaceHolder (PageMenu и Content), содержимое которых будут наполнять отдельные страницы ASP.NET. Элемент управления ContentPlaceHolder позволяет определить содержимое по умолчанию, которое будет использоваться в случае, если страница не переопределит содержимое элемента управления.

<asp:ContentPlaceHolder ID="PageMenu" runat="server">

<ul>

<li><a href="Default.aspx">Main Page</a></li>

<li><a href="Contents.aspx">Content</a></li>

</ul>

</asp:ContentPlaceHolder>

Также как и для обычной страницы, в файле программной логики эталонной страницы можно работать с имеющимися элементами управления, изменять страницу и её поведение, основываясь на параметрах запроса[13].

Использование эталонных страниц налагает особые требования на страницы, которые связаны с ними. Поскольку шаблон содержит элементы управления ContentPlaceHolder, то связанная страница должна содержать элементы управления Content, содержащие код разметки и другие элементы управления, которые будут отображаться на результирующей странице. На странице не должно быть каких-либо серверных элементов управления или кода разметки вне элементов управления Content.

<%@ Page Language="C#" CodeFile="Default.aspx.cs"

Inherits="Default_aspx" MasterPageFile="MainMaster.master" %>

 

<asp:Content ID="MyMenu" runat="server"

ContentPlaceHolderID="PageMenu">

<ul>

<li><a href="Page1.aspx">Page 1</a></li>

<li><a href="Page2.aspx">Page 2</a></li>

</ul>

</asp:Content>

<asp:Content ID="MyContent" runat="server"

ContentPlaceHolderID="Content">

<asp:TextBox ID="txtName" runat="server" />

<asp:Button ID="btnShow" runat="server" />

</asp:Content>

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

protected void Page_Load(object sender, EventArgs e)

{

Master.Page.Header.Title = "Homepage";

}

Для того чтобы привязать страницу к шаблону используется атрибут MasterPageFile директивы @Page. Если необходимо привязать один и тот же шаблон ко всем страницам в директории, то можно задать базовый шаблон в файле web.config (представлен фрагмент файла web.config).

<system.web>

<pages master="MainMaster.master" />

</system.web>

Кроме того, ASP.NET позволяет устанавливать эталонную страницу программным образом. Если необходимо сменить шаблон оформления страницы, необходимо делать это в обработчике события PreInit.

protected void Page_PreInit(object sender, EventArgs e)

{

Page.MasterPageFile = "AnotherMaster.master";

}

Поскольку эталонная страница ‑ это подмножество страницы, то допустимо создавать вложенные шаблоны, указывая для эталонной страницы в директиве @Master путь к другому шаблону с помощью атрибута MasterPageFile. Для этого необходимо в основном шаблоне определить элементы управления ContentPlaceHolder, а в «дочерних» шаблонах наряду с ContentPlaceHolder определить элементы управления Content для замещения содержимого элементов ContentPlaceHolder базового шаблона.

Новой возможностью ASP.NET 2.0 является использование тем. Темы позволяют задать единообразное оформление всех элементов управления, выступая неким аналогом «супер-CSS». При работе с темами используется следующая терминология:

§ Обложка (skin) ‑ именованный набор свойств и шаблонов, который можно применить к любому количеству элементов управления страницы. Обложка всегда связана с определенным типом элементов управления.

§ Таблица стилей (style sheet) ‑ CSS или серверная таблица стилей, которая может использоваться страницами сайта.

§ Тема таблицы стилей (style sheet theme) ‑ тема, используемая для абстрагирования свойств элементов управления от самих этих элементов. Элемент управления может переопределить такую тему.

§ Настроечная тема (customization theme) ‑ тема, используемая для абстрагирования свойств элементов управления от самих этих элементов. Она переопределяет любые установки, заданные в объявлении элемента управления и в определении темы таблицы стилей.

Поясним разницу между настроечными темами и темами таблиц стилей. Первые применяются для окончательной настройки сайта, и заданные в них установки переопределяют установки свойств элементов управления, содержащиеся в исходных файлах.aspx. Изменив тему страницы, вы полностью меняете ее внешний вид, не корректируя ни строчки в ее исходном файле. Поэтому в случае применения настроечных тем страница.aspx может содержать для каждого элемента управления минимум разметки. Темы таблиц стилей применяются к элементам управления сразу после их инициализации, но до того как будут применены атрибуты, заданные в файле.aspx. Используя тему таблицы стилей, разработчик определяет значения свойств элементов управления по умолчанию, которые затем могут быть переопределены установками, заданными в исходном файле.aspx. Настроечные темы всегда имеют приоритет перед темами таблиц стилей[14].

Физически тема представляет собой совокупность файлов и папок, хранящихся в одной корневой папке, имя которой является именем этой темы. Темы могут быть глобальными и локальными. Глобальные темы видимы всем приложениям, установленным на серверном компьютере, а локальные ‑ только тому приложению, в котором они определены. Каталоги глобальных тем расположены по адресу:

%WINDOWS%\Microsoft.NET\Framework\[версия]\ASP.NETClientFiles\Themes

Локальные темы находятся во вложенных каталогах папки App_Themes приложения. В общем случае тема может содержать следующие ресурсы.

1. Файлы CSS. Файл CSS содержит заданные в специальном формате определения визуальных стилей, применяемых к элементам HTML-документа. Он располагается в корневой папке темы.

2. Файлы обложек. Файл обложки содержит специфическую для заданной темы разметку определенного набора элементов управления. Он состоит из последовательности определений элементов управления, содержащих значения большинства их визуальных свойств, и шаблонов. Каждая обложка связана с конкретным типом элементов управления и имеет уникальное имя. Для одного типа элементов управления можно определить несколько обложек. Когда к элементу управления применяется обложка, его разметка, содержащаяся в файле.aspx страницы, модифицируется с учетом установок обложки. Файлы обложек содержатся в корневой папке темы.

3. Файлы изображений. Элементы управления с богатым интерфейсом часто содержат изображения. Изображения, входящие в состав обложки, обычно хранятся в подпапке Images папки ее темы (имя подпапки можно изменить).

4. Шаблоны. Действие обложки элемента управления может распространяться не только на его визуальные свойства, но и на структуру, при условии, что данный элемент управления поддерживает шаблоны. Это позволило бы вам, меняя определение шаблона в теме, изменять внутреннюю структуру элемента управления, не затрагивая, однако, его программный интерфейс и поведение. Шаблон определяется как компонент обложки элемента управления и хранится в файле обложки.

Файл обложки напоминает обычную страницу ASP.NET и содержит объявления элементов управления и директивы импорта. Объявление элемента управления определяет, как он будет выглядеть по умолчанию. Для примера рассмотрим фрагмент файла обложки:

<%-- Это пример обложки элемента Button --%>

<asp:Button runat="server"

BorderColor="darkgray" Font-Bold="true"

BorderWidth="1px" BorderStyle="outset"

ForeColor="DarkSlateGray" BackColor="gainsboro" />

Если применить данную обложку к странице, каждый её элемент управления Button будет выводиться в соответствии с установками, заданными в приведённой разметке. Тема может содержать несколько обложек для определенного типа элементов управления, и все эти обложки, кроме используемой по умолчанию, должны быть именованными. Уникальное имя обложки задается в ее атрибуте SkinID. Установка обложки конкретного элемента управления в файле страницы.aspx выполняется с помощью свойства SkinID этого элемента. Значение данного свойства должно соответствовать имени существующей обложки текущей темы. Если тема страницы не содержит обложки с заданным именем, к элементу управления будет применена обложка, используемая по умолчанию.

Темы можно применять на разных уровнях: приложения, папки и отдельной страницы. Выбор темы на уровне приложения затрагивает все его страницы и элементы управления. Соответствующая установка задается в файле web.config приложения:

<system.web>

<pages theme="RedTheme" />

</system.web>

Атрибут theme определяет настроечную тему, атрибут styleSheetTheme ‑ тему таблицы стилей. Аналогичным образом задается тема, применяемая ко всем страницам в определенной папке: приведенную выше установку включают в содержащийся в этой папке файл web.config. Наконец, тему можно задать для конкретной страницы, чтобы только к ней применялись входящие в состав этой темы стили и обложки. Для того чтобы связать тему с определенной страницей, нужно установить атрибут Theme или StyleSheetTheme директивы @Page. Имейте в виду, что имя выбранной темы должно соответствовать имени существующего подкаталога папки App_Themes приложения либо имени глобальной темы. Если существуют две темы с заданным именем, локальная и глобальная, преимущество отдается локальной теме.

Инфраструктура поддержки тем ASP.NET предоставляет разработчику булево свойство EnableTheming, с помощью которого можно отключить поддержку обложек элементом управления и его дочерними элементами или поддержку тем страницей. По умолчанию это свойство содержит значение true, то есть тема, если таковая задана, используется. Свойство EnableTheming определено в классе Control и наследуется всеми серверными элементами управления и всеми страницами. Если хотите отключить поддержку тем для всех элементов управления страницы, установите в ее директиве @Page EnableTheming=false. Программным способом свойство EnableTheming статических элементов управления (тех, которые объявлены в исходном файле страницы.aspx) может быть установлено только в обработчике события Page_PreInit. Для динамически же создаваемых элементов управления данное свойство должно быть установлено до того, как элемент будет добавлен в дерево элементов управления страницы.

Темы можно применять к страницам динамически, но выполнение данной задачи требует аккуратности. Исполняющая среда ASP.NET загружает информацию о теме сразу после события PreInit. Когда оно генерируется, имя темы, заданное в директиве @Page, уже известно, и именно оно будет использоваться, если вы не переопределите его в обработчике Page_PreInit.

5.12. Некоторые приёмы работы со страницами

В данном параграфе рассматриваются некоторые типовые ситуации и сценарии, возникающие при разработке веб-приложений.

Класс HtmlForm

Класс HtmlForm является производным от HtmlContainerControl и обеспечивает разработчику программный доступ к HTML-элементу <form>, осуществляемый посредством свойств, перечисленных в табл. 24.

Таблица 24

Специфичные свойства класса HtmlForm

Свойство Описание
DefaultButton Строка с идентификатором кнопочного элемента управления, который будет используемым по умолчанию элементом «
DefaultFocus Строка с идентификатором кнопочного элемента управления, который получит фокус ввода при отображении формы «
Disabled Булево значение, указывающее, отключена ли форма. Соответствует HTML-атрибуту disabled
EncType Возвращает и позволяет задать тип кодировки. Соответствует HTML-атрибуту enctype
Method Значение, указывающее, как браузер возвращает данные формы серверу. По умолчанию это свойство имеет значение POST; при желании ему можно присвоить значение GET
Name Возвращает значение свойства UniqueID
SubmitDisabledControls Указывает, следует ли отключенным на клиенте элементам управления предоставлять свои значения для включения в состав возвращаемых данных. По умолчанию ‑ false «
TagName Возвращает значение "form"
Target Имя фрейма или окна для рендеринга сгенерированного для страницы HTML-кода

Форма всегда должна иметь уникальное имя. Если программист никак ее не назвал, ASP.NET сама генерирует имя по встроенному алгоритму. Идентификатор формы можно задать в свойстве ID либо в свойстве Name. Когда установлены оба эти свойства, предпочтение отдается первому[15].

В составе одной страницы не может быть нескольких видимых серверных форм. То есть, на странице можно разместить несколько элементов <form> с атрибутом runat="server", но только у одного из них свойство Visible может быть равно true. Допускается наличие в составе страницы серверной формы и обычной HTML-формы (т. е. без атрибута runat="server").




Поделиться с друзьями:


Дата добавления: 2014-01-11; Просмотров: 504; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.033 сек.