и
. Элемент управления Table не считается многофункциональным. С другой сто роны, при программировании с помощью Calendar разработчик работает в терминах дней, месяцев и диапазонов выбора — т. е. с концепциями, не имеющими прямого отноше ния к HTML -разметке, которую дает в результате элемент Calendar. По этой причине Calendar относится к многофункциональным элементам управления.
Многофункциональные элементы управления В состав ASP. NET входит множество многофункциональных элементов управления, в том числе основанные на данных списковые элементы управления, элементы управления навигацией, элемен ты управления безопасностью и элементы управления, предназначенные для веб-порталов. Ниже приведен список многофункциональных элементов управления, которые не относятся ни к одной специальной категории и потому находятся разделе Standard (Стандартные) панели Toolbox в Visual Studio. • Ad. Rotator. Этот элемент управления позволяет создавать баннер, в котором согласно расписанию (задаваемому заранее и сохраняемому в XML — файле) отображается одно из набора изображений. • Calendar. Этот элемент управления позволяет создавать календарь, отображаю щий месяцы и дни и позволяющий перемещаться по ним и выбирать дату или диапазон дат. • Multi. View, View и Wizard. Эти элементы управления представляют собой усовер шенствованные панели и позволяют переключаться на странице с одной группы элементов на другую. Элемент управления Wizard даже содержит встроенную ло гику навигации. • Substitution. Этот элемент управления в действительности является заполни телем, позволяющим настраивать входящий в состав ASP. NET механизм кэширо вания вывода. • Xml. Этот элемент управления принимает в качестве входных данных файл XML и файл таблицы стилей XSLT и отображает в окне браузера результирующую HTML — разметку.
Элемент управления Ad. Rotator • Элемент управления Ad. Rotator случайным образом выбирает графические баннеры из списка, который указан во внешнем XML -файле расписания. • Очевидно, что перед созданием этого элемента управления понадобится определить XML -файл расписания. Ниже приведен пример : hdr_logo. gif http: //www. apress. com Алла Пугачева вышла замуж за внука Максима Галкина 20 books sub_hero. jpg http: //www. microsoft. com/events/teched 2007/default. mspx Крысы-мутанты работают машинистами метрополитена 20 Java
Свойства элемента Элемент Описание Image. Url Изображение, которое будет отображаться. Здесь может быть указана как относительная ссылка (файл в текущем каталоге), так и полностью уточ ненный URL -адрес в Интернете Navigate. Url Ссылка, по которой будет направляться пользователь в случае щелчка на баннере Alternate. Text Текст, который будет показываться вместо рисунка, если отобразить его невозможно. В некоторых новых браузерах этот текст также будет исполь зоваться в качестве всплывающей подсказки Impressions Число, которое определяет, насколько часто будет отображаться данное рекламное объявление. Это число берется в соотношении с теми, что были указаны для других рекламных объявлений. Например, баннер со значени ем 10 будет отображаться в два раза чаще, чем баннер со значением 5 Keyword Ключевое слово, идентифицирующее группу рекламных объявлений. Может применяться для фильтрации.
Ad. Rotator protected void Ad. Rotator 1_Ad. Created(object sender, Ad. Created. Event. Args e) { lnk. Banner. Navigate. Url = e. Navigate. Url; lnk. Banner. Text = «Click here for information about our sponsor: «; lnk. Banner. Text += e. Alternate. Text; }
Элемент управления Calendar с. 1/2 Этот элемент управления создает многофункциональное и привлекательное окно ка лендаря, которое показывает по одному месяцу за раз. Пользователь может переходить от одного месяца к другому, выбирать определенную дату, и даже выбирать диапазон дней (если разрешен множественный выбор). Элемент управления Calendar имеет много свойств, которые все вместе позволяют изменять практически любую его часть. Например, можно настраивать цвета переднего плана и фона, шрифт, заголовок, фор мат даты, выбранную в текущий момент дату и т. д. Он также предоставляет несколько событий, которые позволяют реагировать на изменение пользователем текущего месяца (Visible. Month. Changed), выбор пользователем даты (Selection. Changed) и подготовку элементом управления Calendar к визуализации дня (Day. Render). В следующем дескрипторе Calendar устанавливается несколько базовых свойств: Наиболее важным событием Calendar является Selection. Changed, которое запус кается каждый раз, когда пользователь щелкает на какой-то дате. Ниже показан базо вый обработчик событий, отвечающий на событие Selection. Changed и отображающий выбранную дату: protected void Calendar 1_Selection. Changed(object sender, Event. Args e) { lbl. Dates. Text = «You selected these dates: «; foreach (Date. Time dt in Calendar 1. Selected. Dates) { lbl. Dates. Text += dt. To. Long. Date. String() + » «; } }
Элемент управления Calendar с. 2/2
Организация навигации Навигация является фундаментальным компонентом любого веб-сайта. Хотя про цесс перехода пользователя от одной страницы к другой достаточно прост, соз дание единообразной системы навигации, которая будет действовать для всего сайта, требует больших усилий. В то время как с помощью ряда ссылок (и ценой значитель ных усилий) можно построить собственную систему навигации, ASP. NET предоставляет встроенную систему навигации, которая упрощает решение этой задачи. Ключевые темы: • Элементы управления Multi. View и Wizard. Эти элементы управления позволяют объединить последовательность шагов в одну страницу. • Модель карты сайта. Эта модель позволяет определить структуру навигации по веб-сайту и связать ее непосредственно с многофункциональными элементами управления. • Многофункциональные элементы управления навигацией. К ним относятся эле менты управления Tree. View и Menu. С помощью этих элементов управления, модели карты сайта и мастер-страниц мож но построить завершенную систему навигации с минимальными усилиями. Наиболее важно то, что ASP. NET четко разделяет данные (информацию о структуре веб-сайта) и реализацию (элементы управления навигацией). Это означает, что можно реорганизо вывать, заменять или переименовывать веб-страницы, не нарушая структуры веб-сайта или не редактируя какую-либо часть его кода. Достаточно внести соответствующие изменения в файл карты сайта приложения.
Страницы со множеством представлений В большинстве веб-сайтов задачи распределяются между множеством страниц. Например, чтобы на сайте электронной коммерции добавить товар в товарную тележку и включить его в итоговый счет, потребуется перейти с одной страницы на другую. Этот подход наиболее очевиден, и его легко запрограммировать — при условии применения какого-нибудь способа управления состоянием, который обеспечивает передачу информации от страницы к странице. В других ситуациях может требоваться внедрение кода нескольких различных стра ниц внутрь одной страницы. Например, нужно предоставить пользователю возможность перемещения между несколькими представлениями одних и тех же данных (вроде таб лицы и диаграммы), не покидая страницу. Или же необходимо решить многошаговую задачу (такую как предоставление информации о пользователе для регистрации учетной записи), не заботясь о передаче соответствующей информации между веб-страницами. В хорошо спроектированном сайте пользователь заметит лишь одно отличие: при подходе с множеством представлений сохраняется один и тот же URL-адрес. Главным же отличием является модель написания кода. При использовании нескольких страниц обеспечивается более четкое разделение, но при этом определение способа взаимодействия между страницами (способа совместного использова ния или передачи информации) более трудоемко. В случае применения множества представ лений обеспечивается менее четкое разделение, однако написание кода для небольших нераз деляемых задач упрощается.
Элемент управления Multi. View является более простым из двух элементов управле ния с множеством представлений. Фактически, элемент управления Multi. View предостав ляет способ объявления нескольких представлений с отображением только одного из них в каждый момент времени. Этот элемент не имеет пользовательского интерфейса по умолчанию — разработчик получает только HTML-разметку и элементы управления, которые добавил. Элемент управления Multi. View аналогичен подходу с при менением специальной панели.
Multi. View — разметка Showing View #1 Showing View #2 Text content. Showing View #3 Представления можно добавлять и программно, создавая экземпляр объекта нового представления и добавляя его в элемент управления Multi. View с помощью методов Add() и Add. At() из коллекции Views.
Управление отображением представления Свойство Multi. View. Achive. View. Index определяет представление, которое будет отображаться. Это единственное представление, визуализируемое на странице. Значением свойства Active. View. Index по умолчанию является -1, которое означает, что ни одного представления не отображается. Один из вариантов предполагает при менение спискового элемента управления, с помощью которого пользователь может вы бирать представление из полного списка представлений. Ниже приведен пример кода, который связывает список представлений с окном списка: protected void Page_Load(object sender, Event. Args e) { if (!Page. Is. Post. Back) { Drop. Down. List 1. Data. Source = Multi. View 1. Views; Drop. Down. List 1. Data. Text. Field = «ID»; Drop. Down. List 1. Data. Bind(); } } Код, который устанавливает текущее представление в соответствии с индексом спи ска, имеет следующий вид: protected void Drop. Down. List 1_Selected. Index. Changed(object sender, Event. Args e) { Multi. View 1. Active. View. Index = Drop. Down. List 1. Selected. Index; }
Команды Multi. View Имя команды Поле Multi. View Описание Prev. View Previous. View. Command. Name Переход к предыдущему представлению Next. View. Command. Name Переход к следующему представлению Switch. View. Byl. DCommand. Name Переход к представлению с определенным идентифика тором (строковым именем). Идентификатор извлекается из свойства Command. Argument кнопочного элемента управления Switch. View. Bylndex. Command. Name Переход к представлению с оп ределенным числовым индексом. Индекс извлекается из свойства Command. Argument кнопочного элемента управления
Производительность страниц с Multi. View Самой важной особенностью элемента управления Multi. View является то, что он, в отли чие от многофункциональных элементов управления данными (Grid. View, Forms. View и т. д. ), не является контейнером именования. Это значит, что в случае добавления элемента управ ления text. Box 1 в одно представление нельзя будет добавить еще один элемент управления text. Box 1 в другое представление. С точки зрения модели страницы между элементами управ ления, которые добавлены в представление, и элементами управления в остальной части стра ницы не существует никакого реального различия. В результате страницы, создаваемые с помощью Multi. View, будут более громоздкими, чем обычные страницы. Это обусловлено тем, что вся модель элемента управления — включая эле менты управления каждого представления — создается при каждой обратной отправке и сохра няется в состоянии представления. В большинстве ситуаций это не имеет особого значения, если не предполагается программно манипулировать большим количеством элементов управления или не будут ис пользоваться несколько источников данных. Конечно, привязка данных необходима не во всех случаях применения элемента управления Multi. View. Прекрасным вариантом использования Multi. View является расширенный набор элементов управления вводом — например, форма онлайнового опроса, разделенная на отдель ные представления просто для того, чтобы избавить пользователя от необходимости слишком часто прибегать к прокрутке. Этот пример хорошо подходит для Multi. View, поскольку в самом конце, когда опрос будет завершен, можно будет прочитать все данные из элементов управления каждого представления.
Элемент управления Wizard • Элемент управления Wizard (мастер) представляет собой более эффектную версию элемента управления Multi. View. Он тоже поддерживает отображение одновременно од ного из множества представлений, но предоставляет значительные и при этом настраи ваемые функциональные возможности, в том числе кнопки навигации, боковую панель со ссылками на выполняемые действия (шаги), стили и шаблоны. • Обычно мастера помогают решить какую-то одну задачу, и пользователь последова тельно выполняет предлагаемые мастером действия, переходя от текущего шага к сле дующему (или возвращаясь к предыдущему, если нужно внести какие-то изменения). Элемент управления Wizard в ASP. NET поддерживает также нелинейную навигацию — т. е. позволяет пропускать отдельные действия в зависимости от предоставленной поль зователем информации. • По умолчанию элемент управления Wizard предоставляет навигационные кнопки и боковую панель со ссылками на каждое отображаемое слева действие. Боковую панель можно скрыть, установив свойство Wizard. Display. Side. Bar в false. Содержимое для каждого шага можно предоставить с помощью любого элемента управления HTML или ASP. NET.
Свойства шагов в элементе Wizard Свойство Описание Title Описательное имя шага. Это имя используется для текста ссылок в боковой панели Step. Type Тип шага, выражаемый в виде значения из перечисления Wizard. Step. Type. Это значение определяет тип навигационных кнопок, которые будут отображать ся для данного шага. Возможные варианты выбора: Start (отображает кнопку Next (Далее)), step (отображает кнопки Next (Далее) и Previous (Назад)), Finish (отображает кнопки Finish (Готово) и Previous (Назад)), Complete (не отображает никаких кнопок и скрывает боковую панель, если она используется) и Auto (тип шага определяется на основании позиции в коллекции). Значением по умолчанию является Auto, т. е. первым шагом будет Start, последним — Finish, а всеми остальными — Step Allow. Return Показывает, может ли пользователь возвращаться к этому шагу. Если это свой ство имеет значение false, то после того, как пользователь пройдет этот шаг, он не сможет вернуться назад. Ссылка боковой панели для этого шага будет недоступной, а кнопка Previous (Назад) следующего шага либо пропустит этот шаг, либо будет полностью скрыта (в зависимости от того, какое значение имеет свойство Allow. Return в предыдущих шагах)
Пример Wizard
События Wizard Событие Описание Active. Step. Changed Генерируется, когда элемент управления переключается на новый шаг (либо вследствие того, что пользователь щелкнул на кнопке нави гации, либо потому, что код изменил свойство Active. Step. Index) Cancel. Button. Click Генерируется при щелчке на кнопке Cancel (Отмена). По умолчанию кнопка Cancel не отображается, однако ее можно добавить к каж дому шагу, установив свойство Wizard. Display. Cancel. Button. Как правило, кнопка Cancel осуществляет выход из мастера. Если какой-либо код очистки отсутствует, достаточно просто установить свойство Cancel. Destination. Page. Url, и мастер автоматически позабо тится о переадресации Finish. Button. Click Генерируется при щелчке кнопки Finish (Готово) Next. Button. Click и Previous. Button. Click Эти события генерируются при щелчке на кнопке Next (Далее) или Previous (Назад) на любом шаге. Однако, поскольку перейти от одного шага к следующему можно несколькими способами, лучше выполнить обработку события Active. Step. Changed Side. Bar. Button. Click Генерируется при щелчке на кнопке в области боковой панели
Стили и шаблоны Wizard • Главным достоинством элемента управления Wizard яв ляется способ, посредством которого он позволяет настраивать свой внешний вид. Это означает, что если требуется базовая модель (многошаговый процесс с кнопками нави гации и различными событиями), можно разработать собственный пользовательский интерфейс, отличный от применяемого по умолчанию. • В зависимости от того, насколько радикально требуется изменить внешний вид мас тера, доступны различные варианты. Если изменений немного, можно воспользовать ся различными высокоуровневыми свойствами, которые позволяют управлять цветами, шрифтами, интервалами и стилями границ, как это делается в любом элементе управ ления ASP. NET. Можно также настраивать внешний вид каждой кнопки. Можно также добавить верхний колонтитул с помощью свойства Header. Text. • Стили позволяют расширить возможности управления. С их помощью можно при менить параметры форматирования к различным частям элемента управления Wizard, аналогично использованию стилей для форматирования различных аспектов много функциональных элементов управления данными, подобных Grid. View.
Стили Wizard Стиль Описание Control. Style Применяется ко всем разделам элемента управления Wizard Header. Style Применяется к разделу верхнего колонтитула элемента управ ления Wizard, который будет отображаться только в том слу чае, если в свойстве Header. Text задан какой-либо текст Side. Bar. Style Применяется к области боковой панели элемента управления Wizard Side. Bar. Button. Style Применяется только к кнопкам на боковой панели Step. Style Применяется к разделу элемента управления, в котором опре деляется содержимое шага Navigation. Style Применяется к нижней области элемента управления, в кото рой отображаются кнопки навигации Navigation. Button. Style Применяетс только к кнопкам в области навигации Start. Next. Button. Style Применяется к кнопке навигации Next (Далее) на первом шаге (если свойство Step. Type имеет значение Start) Step. Next. Button. Style Применяется к кнопке навигации Next на промежуточных ша гах (если свойство Step. Type имеет значение Step) Step. Previous. Button. Style Применяется к кнопке навигации Previous (Назад) на промежу точных шагах (если свойство Step. Type имеет значение Step) Finish. Previous. Button. Style Применяется к кнопке навигации Previous в последнем шаге (если свойство Step. Type имеет значение Finish) Cancel. Button. Style Применяется к кнопке Cancel (Отмена), если свойство W izard. Display. Cancel. Button имеет значение true
Шаблоны Wizard Шаблон Описание Header. Template Определяет содержимое области верхнего колонтитула Side. Bar. Template Определяет боковую панель, которая обычно включает ссылки навигации для каждого шага Start. Navigation. Template Определяет кнопки навигации для первого шага (если свойство Step. Type имеет значение Start) Step. Navigation. Template Определяет кнопки навигации для промежуточных шагов (если свойство Step. Type имеет значение Step) Finish. Navigation. Template Определяет кнопки навигации для последнего шага (если свойство Step. Type имеет значение Finish) Layout. Template Определяет общее расположение верхнего колонтитула, боковой панели, области шага и кнопок навигации
Шаблоны Wizard — пример Чтобы настроить кнопки навигации, можно добавить также приведенные ниже шаблоны. В этом примере сохраняются стандартные кнопки (явным их объявлением) и добавляется курсивный текст, показывающий, какой шаблон используется в данный момент. Start. Navigation. Template Step. Navigation. Template Finish. Navigation. Template
Шаблон Layout. Template позволяет указать ASP. NET по зиции других шаблонов относительно друга. Вставка каждого шаблона выполняется посредством элемента управления Place. Holder с соответствующим именем (header. Placeholder, side. Bar. Placeholder, wizard. Step. Placeholder и navigation. Placeholder). Например, если требуется просто разместить верхний колонтитул в верхней части элемента управления, под ним — бо ковую панель, еще ниже — раздел шага, а в самом низу — навигационные кнопки, и все это без какой-либо дополнительной разметки, шаблон Layout. Template должен быть сконфигурирован следующим образом: Для получения более сложной компоновки отдельные объекты Placeholder нужно было бы разместить в ячейках таблицы или в элементах
, позиционируемых с по мощью атрибутов CSS-стиля.
Карты сайта Если веб-сайт содержит довольно много страниц, возможно, потребуется какая-то системы навигации, которая позволит пользователю переходить от одной страницы к другой. Очевидно, что для реализации практически любой системы навигации можно ис пользовать набор элементов управления ASP. NET, но всю трудную работу все же придет ся выполнять вручную. К счастью, ASP. NET предлагает новый набор функциональных средств навигации, которые существенно упрощают стоящую задачу. В лучших традициях средств ASP. NE T навигация в ASP. NET является гибкой, конфи гурируемой и подключаемой. Она состоит из трех компонентов: • Способ определения структуры навигации по веб-сайту. Этот компонент пред ставляет собой XML-карту сайта, которая по умолчанию хранится в файле. • Удобный способ синтаксического анализа файла карты сайта и преобразования его информации в подходящую объектную модель. Эти задачи выполняются эле ментом управления Site. Map. Data. Source и компонентом Xml. Site. Map. Provider. • Способ использования информации карты сайта для отображения текущей по зиции пользователя и предоставления ему возможности без труда переходить из одного места в другое. Эта часть реализуется с помощью элементов управления, связанных с элементом управления Site. Map. Data. Source; к ним относятся нави гационные цепочки («хлебные крошки»), списки, меню и деревья. Каждая из этих составляющих может настраиваться и расширяться независимо от других. Например, если требуется изменить внешний вид элементов управления нави гации, нужно просто связать различные элементы управления с элементом управления Site. Map. Data. Source. С другой стороны, если необходимо прочитать информацию карты сайта в другом формате или из другого места, понадобится изменить поставщика карты сайта.
Определение карты сайта слайд 1/2 Отправной точкой в системе навигации сайта, построенной на основе карты, яв ляется поставщик карты сайта. ASP. NET распространяется с единственным постав щиком карты сайта Xml. Site. Map. Provider, который может извлекать информацию о карте сайта из XML-файла. Поставщик Xml. Site. Map. Provider ищет файл Web. sitemap в корне виртуального ка талога. Подобно всем поставщикам карт сайта, его задача заключается в извлечении данных карты сайта и создании соответствующего объекта Site. Map. Затем этот объ ект Site. Map может быть сделан доступным другим элементам управления посредством Site. Map. Data. Source. Чтобы проверить его в действии, следует создать файл Web. sitemap и определить структу ру веб-сайта с помощью элементов и . Чтобы добавить карту сайта в Visual Studio, необходимо выбрать пункт меню Website->Add New Item (Веб-сайт -> Добавить новый элемент) (или Projects Add New Item (Проект -> Добавить новый элемент) в слу чае веб-проекта), указать шаблон Site Map (Карта сайта) и щелкнуть на кнопке Add (Добавить).
Определение карты сайта слайд 2/2 Базовая структура файла карты сайта, имеет следующий вид: . . . Допустимая карта сайта должна начинаться с корневого узла , за которым следует элемент , представляющий домашнюю страницу по умолчанию. В корневой элемент можно вкладывать любое требуемое количество уровней других элементов . Каждый узел карты сайта должен содержать заголовок, описание и URL-адрес, как показано в следующем примере: В этом примере для указания URL-адреса использован синтаксис относительного пути. /, который указывает на корневую папку веб-приложения. Этот стиль не обяза телен, но настоятельно рекомендуется, поскольку он гарантирует правильную интер претацию ссылок карты сайта независимо от текущей папки. Теперь элемент можно использовать для создания карты сайта. Единственное дополнительное ограничение заключается в том, что нельзя создавать два узла карты сайта, имеющие одинаковый URL-адрес.
Определение карты сайта — пример
Привязка к карте сайта Как только файл Web. sitemap определен, его можно использовать в странице. Здесь как раз очень удобно применять мастер-страницы, чтобы элементы управления навига цией можно было определять как части шаблона и повторно их использовать в каждой странице. Ниже показано, как в мастер-странице определить базовую структуру, которая помещает элементы управления навигации слева и создает объект Site. Map. Data. Source, предоставляющий навигационную информацию другим элементам управления: В качестве решения можно воспользоваться элементом управления Tree. View. Можно добавить Tree. View и привязать его к элементу управления Site. Map. Data. Source на мастер-странице с помо щью Data. Sourcel. D, как показано ниже : Или же воспользоваться элементом управления Menu:
Навигационные цепочки • Элемент Site. Map. Path обеспечивает навигационную це почку («хлебные крошки» — breadcrmb) — т. е. элемент управления показывает текущее положение пользователя и позволяет ему с помощью ссылок переходить вверх по иерар хии на более высокий уровень.
Элемент управления Site. Map. Path обладает небольшим, но очень важным отли чием от остальных элементов управления навигации, таких как Tree. View и Menu. Элемент Site. Map. Path работает непосредственно с моделью навигации ASP. NET — другими словами, ему не нужно получать свои данные через элемент управления Site. Map. Data. Source. В результате элемент управления Site. Map. Path можно использо вать в страницах, не имеющих элемента управления Site. Map. Data. Source, а изменение свойств Site. Map. Data. Source не будет оказывать влияние на Site. Map. Path. Элемент управления Site. Map. Path определяется следующим образом: Элемент управления Site. Map. Path полезен как для мгновенного получения представ ления о текущей позиции, так и для перемещения вверх по иерархии. Однако его всегда нужно использовать совместно с другими элементами управления навигацией, которые позволяют пользователю перемещаться вниз по иерархии карты сайта.
Свойства Site. Map. Path Свойство Описание Show. Tool. Tips Если это свойство установить в false, текст описания не будет по являться при задержке указателя мыши над частью пути карты сайта Parent. Levels. Displayed Определяет максимальное количество одновременно отображае мых родительских уровней. По умолчанию это свойство имеет значение -1, которое означает, что будут показаны все уровни Render. Current. Node. As. Link Если это свойство установить в true, часть страницы, указы вающая текущую страницу, превращается в выбираемую ссылку. По умолчанию это свойство имеет значение false, т. к. пользова тель уже находится на текущей странице Path. Direction На выбор доступны два варианта: Root. To. Current (по умолча нию) и Current. To. Root (порядок уровней в пути меняется на противоположный) Path. Separator Показывает символы, которые будут помещены между всеми уров нями в пути. По умолчанию это свойство установлено в >. Другим часто используемым разделителем пути является двоеточие (: )
Шаблоны и стили Site. Map. Path Шаблон Стиль Применение Node. Style Node. Template Применяется ко всем частям пути за ис ключением корневого и текущего узла Current. Node. Style Current. Node. Template Применяется к узлу, представляющему текущую страницу Root. Node. Style Root. Node. Template Применяется к узлу, представляющему корневой узел. Если корневым узлом является текущий узел, используются стили шаблон текущего узла Path. Separator. Style Path. Separator. Template Разделитель между всеми узлами
Пример Site. Map. Path Например, в следующем элементе управления Site. Map. Path используется изображе ние стрелки в качестве разделителя и фиксированная строка полужирного текста для корневого узла. Финальная часть пути, которая представляет текущую страницу, выде ляется курсивом. Root <asp: Label ID=Label 1 runat="server" Text='’>
Элемент управления Tree. View • Элемент управления Tree. View является наиболее функциональным элементом управ ления навигацией. Он не только позволяет генерировать многофункциональные пред ставления деревьев, но и поддерживает заполнение частей дерева по запросу (и без обновления всей страницы). Однако более важным фактом является то, что этот эле мент управления поддерживает широкий диапазон стилей, с помощью которых можно преобразовать его внешний вид. Устанавливая всего лишь несколько основных свойств, можно добиться того, что элемент управления Tree. View будет выглядеть не как спра вочный указатель, а как список файлов и папок каталога. В действительности элемент управления Tree. View вообще не нужно генерировать в виде дерева, т. к. он может ра ботать также с неоформленными иерархическими данными — например, с таблицей содержимого — за счет изменения лишь нескольких настроек стиля. • Каждый узел в дереве представлен объектом Tree. Node. Каждый объект Tree. Node имеет связанный с ним фрагмент текста, отображаемый в дереве. Объект Tree. Node предлагает также свойства навигации, такие как Child. Nodes (кол лекция узлов, которые он содержит) и Parent (контейнерный узел, расположенный в дереве на уровень выше).
Свойства Tree. Node Свойство Описание Text Текст, отображаемый в дереве для данного узла Tool. Tip Текст контекстной подсказки, который появляется при наведении указателя мыши на текст узла Value Хранит неотображаемое значение с дополнительными данными об узле (например, уникальный идентификатор, который будет использоваться при обработке событий щелчков для идентификации узла или поиска дополни тельной информации) Navigate. Url Если установить это свойство, оно автоматически переадресует пользо вателя по соответствующему URL-адресу после выбора узла. В против ном случае придется повторно отреагировать на событие Tree. View. Selected. Node. Changed, чтобы решить, какое действие нужно выполнить Target Если свойство Navigate. Url установлено, то это свойство задает искомое окно или фрейм для ссылки. Если свойство Tagret не установлено, то в текущем окне браузера открывается новая страница. Tree. View также имеет свойство Target, с помощью которого можно применить цель по умолчанию для всех экземпляров Tree. Node Image. Url Изображение, которое отображается рядом с этим узлом Image. Tool. Tip Текст контекстной подсказки для изображения, отображаемого рядом с узлом
Tree. View – пример слайд 1/2 protected void Page_Load(object sender, Event. Args e) { if (!Page. Is. Post. Back) { Data. Set ds = Get. Products. And. Categories(); foreach (Data. Row row in ds. Tables[«Categories»]. Rows) { Tree. Node node. Category = new Tree. Node(row[«Category. Name»]. To. String(), row[«Category. ID»]. To. String()); Tree. View 1. Nodes. Add(node. Category); Data. Row[] child. Rows = row. Get. Child. Rows(ds. Relations[0]); foreach (Data. Row child. Row in child. Rows) { Tree. Node node. Product = new Tree. Node(child. Row[«Product. Name»]. To. String(), child. Row[«Product. ID»]. To. String()); node. Category. Child. Nodes. Add(node. Product); } node. Category. Collapse(); } } }
Tree. View – пример, слайд 2/2 При щелчке на узле можно обработать событие Selected. Node. Changed, чтобы пока зать информацию об узле: protected void Tree. View 1_Selected. Node. Changed(object sender, Event. Args e) { if (Tree. View 1. Selected. Node == null) return; if (Tree. View 1. Selected. Node. Depth == 0) { lbl. Info. Text = «You selected Category ID: «; } else if (Tree. View 1. Selected. Node. Depth == 1) { lbl. Info. Text = «You selected Product ID: «; } lbl. Info. Text += Tree. View 1. Selected. Node. Value; } }
Стили Tree. View • Элемент управления Tree. View имеет подробную модель стилей, которая позволя ет полностью управлять его внешним видом. Каждый стиль применяется к типу узла. Стили представляются классом Tree. Node. Style, который унаследован от обычного клас са Style. Подобно другим многофункциональным элементам управления, с помощью стилей можно настраивать цвета фона и изображения, шрифты и границы. Кроме того, класс Tree. Node. Style добавляет свойства стилей, специфичные для узлов. Эти свойства связаны с изображением узла и пространством вокруг него.
Свойства Tree. Node. Style Свойство Описание Image. Url URL-адрес изображения, отображаемого рядом с узлом Node. Spacing Интервал (в пикселях) между текущим узлом и узлами, располо женными над ним и под ним Vertical. Spacing Интервал (в пикселях) между верхней и нижней частями текста узла и границей вокруг текста Horizontal. Spacing Интервал (в пикселях) между левой и правой частью текста узла и границей вокруг текста Child. Nodes. Padding Интервал (в пикселях) между последним дочерним узлом разверну того родительского узла и следующим родственным узлом
Стили Tree. View Свойство Описание Node. Style Применяется ко всем узлам Root. Node. Style Применяется только к узлам первого уровня (корневой узел) Parent. Node. Style Применяется к любому узлу, содержащему другие узлы, кроме кор невых узлов Leaf. Node. Style Применяется к любому узлу, не содержащему дочерних узлов и не являющемуся корневым узлом Selected. Node. Style Применяется к выбранному на данный момент узлу Hover. Node. Style Применяется к узлу, над которым находится указатель мыши. Эти настройки применяются только в клиентах верхнего уровня, поддерживающих необходимый динамический сценарий
Стили уровней узлов слайд 1/2 • Применение стилей к различным типам узлов само по себе интересно, хотя более полезной особенностью является возможность применения стилей на основе уровня узла. Объясняется это тем, что большинство деревьев используют жесткую иерархию. В рассматриваемом случае важно определить не нали чие дочерних узлов в данном узле, а его глубину. • Единственная проблема состоит в том, что элемент управления Tree. View теоре тически может иметь неограниченное количество уровней узлов. В связи с этим нет смысла предлагать такие свойства, как First. Level. Style, Second. Level. Style и т. д. Наоборот, Tree. View имеет коллекцию Level. Styles, которая может иметь столько эле ментов, сколько необходимо. Уровень выводится из позиции стиля в коллекции, поэто му первый элемент считается корневым уровнем, второй элемент — вторым уровнем узла и т. д. Чтобы такая система могла работать, понадобится повторить этот порядок и включить пустой заполнитель стиля, если необходимо пропустить уровень, не изменяя форматирование.
Стили уровней узлов слайд 2/2 Например, ниже показан элемент управления Tree. View, в котором отступы не ис пользуются. Вместо них для разделения уровней устанавливаются разные промежутки и выбираются разные шрифты:
Изображения в Tree. View • Как уже известно, изображение для одиночного узла можно задать с помощью свой ства Tree. View. Node. Image. Url. К счастью, когда требуется назначить последовательный набор изображений для всего дерева, применять такой детальный подход не придет ся. Вместо этого можно использовать свойства Tree. View для установки изображений для всех узлов. Можно выбрать картинку, которая будет отображаться рядом со всеми свернутыми узлами (Collapsed. Url), всеми развернутыми узлами (Expandlmage. Url) и всеми узлами, которые не имеют дочерних узлов и поэтому не могут быть развернуты (No. Expandlmage. Url). Если задать эти свойства и определить изображение для опреде ленного узла с помощью свойства Tree. View. Node. Image. Url, то преимущество будет от дано изображению, определенному для узла. • Элемент управления Tree. View имеет коллекцию изображений, которыми можно пользоваться, чтобы не тратить время на создание специальных изображений для уз лов. Для доступа к этим изображениям предназначено свойство Tree. View. Image. Set, которое принимает одно из 16 значений из перечисления Tree. View. Image. Set. Каждый набор включает изображение для свернутого и развернутого узла, а также для узла, не имеющего дочерних узлов. Применяя свойство Image. Set, можно отказаться от исполь зования любых других свойств, связанных с изображениями.
Элемент управления Menu • ASP. NET предлагает еще один многофункциональный элемент управления, поддер живающий иерархические данные — Menu. Подобно Tree. View, элемент управления Menu можно связать с источником данных или заполнить его вручную с помощью объектов Menultem. • Класс Menultem не является таким же многофункциональным, как Tree. Node — на пример, объекты Menultem не поддерживают флажки или программную установку раз вернутого/свернутого состояния. Тем не менее, у них есть много похожих свойств, сре ди которых свойства, отвечающие за настройку изображений, определяющие, можно ли выбирать элемент, а также свойства, определяющие целевую ссылку.
Свойства Men. Item Свойство Описание Text Текст, отображаемый в меню для данного элемента (при его отображении) Tool. Tip Текст контекстной подсказки, которая появляется при наведении указателя мыши на элемент меню Value Хранит неотображаемое значение с дополнительными данными об элементе меню (например, уникальный идентификатор, используе мый при обработке событий щелчка для идентификации узла или поиска дополнительной информации) Navigate. Url Если это значение установлено, то при щелчке на данном узле он автоматически направляет пользователя по указанному URL-адресу. В противном случае придется повторно среагировать на событие Menu. Item. Click, чтобы решить, какое действие нужно выполнить Target Если свойство Navigate. Url установлено, это свойство задает искомое окно или фрейм для ссылки. Если свойство Target не задано, то в текущем окне браузера будет открыта новая страница. Элемент управления Menu также предоставляет свойство Target, с помощью которого можно определить, какая цель будет использо ваться по умолчанию для всех экземпляров Menultem Selectable Если это свойство будет иметь значение false, то элемент нельзя будет выбрать. Обычно значение false присваивается этому свой ству только тогда, когда элемент является подзаголовком, содержа щим выбираемые дочеркие элементы Image. Url Если это свойство установлено, оно будет определять изображе ние, отображаемое рядом с элементом меню (справа от текста). По умолчанию изображение не используется Pop. Out. Image. Url Изображение, которое отображается рядом с элементом меню (справа от него), если этот элемент имеет вложенные элемен ты меню. По умолчанию этим изображением является маленькая сплошная стрелка Separatorlmage. Url Изображение, которое отображается непосредственно под этим элементом меню, чтобы отделить его от следующего элемента
Menu — пример protected void Page_Load(object sender, Event. Args e) { if (!Page. Is. Post. Back) { Data. Set ds = Get. Products. And. Categories(); foreach (Data. Row row in ds. Tables[«Categories»]. Rows) { Menu. Item item. Category = new Menu. Item( row[«Category. Name»]. To. String(), row[«Category. ID»]. To. String()); Menu 1. Items. Add(item. Category); Data. Row[] child. Rows = row. Get. Child. Rows(ds. Relations[0]); foreach (Data. Row child. Row in child. Rows) { Menu. Item item. Product = new Menu. Item(child. Row[«Product. Name»]. To. String(), child. Row[«Product. ID»]. To. String()); item. Category. Child. Items. Add(item. Product); } } protected void Menu 1_Menu. Item. Click(object sender, System. Web. UI. Web. Controls. Menu. Event. Args e) { if (Menu 1. Selected. Item == null) return; if (Menu 1. Selected. Item. Depth == 0) { lbl. Info. Text = «You selected Category ID: «; } else if (Menu 1. Selected. Item. Depth == 1) { lbl. Info. Text = «You selected Product ID: «; } lbl. Info. Text += Menu 1. Selected. Item. Value; }
Отличия Tree. View и Menu • Элемент управления Menu отображает одно подменю. Элемент управления Tree. View может раскрывать произвольное количество ветвей узла одновременно. • Элемент управления Menu отображает корневой узел ссылок в странице. Все дру гие элементы отображаются с помощью плавающих меню, которые появляются над любым другим содержимым на странице. Элемент управления Tree. View по казывает все свои элементы внутри страницы. • Элемент управления Tree. View поддерживает заполнение по запросу и обратные вызовы на стороне клиента. Элемент управления Menu не поддерживает их. • Элемент управления Menu поддерживает шаблоны. Элемент управления Tree. View не поддерживает их. • Элемент управления Tree. View поддерживает флажки для любого узла. Элемент управления Menu не поддерживает их. • Элемент управления Menu поддерживает горизонтальную и вертикальную ком поновку, в зависимости от значения свойства Orientation. Элемент управления Tree. View поддерживает только вертикальное размещение.
Стили Menu слайд 1/2 • Элемент управления Menu предлагает огромное количество стилей. Подобно Tree. View, Menu является специальным классом, производным от базового клас са Style: в действительности таких классов два — Menu. Style и Menu. Item. Style. Эти стили делают доступными свойства интервалов (Item. Spacing, Horizontal. Padding и Vertical. Padding). Однако посредством стиля нельзя задавать изображения элемента меню, поскольку у него нет свойства Image. Url. • Подобно Tree. View, элемент управления Menu поддерживает определение стилей меню для различных уровней меню. Однако главная отличительная особенность, сви детельствующая в пользу элемента управления Menu, связана со статическими элемен тами (элементами корневого уровня, которые отображаются на странице при первой ее генерации) и динамическими элементами (элементами в плавающих меню, которые до бавляются при наведении указателя мыши на часть меню). На большинстве веб-сайтов существует четкое различие в применении стилей к этим двум элементам. Для этого в классе меню определены два параллельных набора стилей: один применяется к стати ческим элементам, а другой — к динамическим
Стили Menu слайд 2/2 Статический стиль Динамический стиль Описание Static. Menu. Style Dynamic. Menu. Style Определяет внешний вид всего «окна», в котором появляются все элементы меню. В случае Static. Menu. Style это «окно» отображается на странице, а в случае Dynamic. Menu. Style — как всплывающее «окно» Static. Menu. Item. Style Dynamic. Menu. Item. Style Определяет внешний вид отдель ных элементов меню Static. Selected. Style Dynamic. Selected. Style Определяет внешний вид выбран ного элемента. Имейте в виду, что выбранным является не тот элемент, на который наведен ука затель, а тот элемент, который был выбран до этого щелчком мыши (и который инициировал послед нюю обратную отправку) Static. Hover. Style Dynamic. Hover. Style Определяет внешний вид элемен та, на который пользователь навел указатель мыши
Оформление приложений • Построение профессионального веб-приложения не ограничивается проектирова нием индивидуальных веб-страниц. Для этого требуются также инструменты, ко торые позволят объединить разрозненные веб-страницы в завершенный, единообразный веб-сайт. Для этого в ASP. NET определены два средства: • Темы — позволяют определять детали форматирования разнообразных элементов управления и легко повторно использовать эти форматы во множестве стра ниц. Темы значительно упрощают стандартизацию внешнего вида и поведения веб-сайта и последующую его настройку. Как только тема применена, всему веб-сайту можно придать новый облик, просто изменив определение темы. • Мастер-страницы — позволяют создавать многократно используемые шаблоны страниц. С помощью мастер-страницы можно определить компоновку своих веб-страниц, которая будет включать все обычные детали — заголовки, панели меню и баннеры. Как только эта структура формализована, мастер-страницу можно использовать во всем веб-сайте, обеспечивая единство дизайна всех страниц. В результате посетители веб-сайта смогут переходить от одного его раз дела к другому, не замечая никаких изменений.
Каскадные таблицы стилей • Чтобы придать дизайну веб-сайта завершенный вид, прежде всего, нужно вырабо тать единообразный визуальный стиль. Другими словами, понадобится стандартизиро вать каждый элемент дизайна. Если необходимо настроить шрифт или границы кнопки, то эти изменения должны затронуть каждую кнопку веб-сайта. Сохранение единообразия не всегда просто. Чтобы упростить эту задачу, можно воспользоваться каскадными таб лицами стилей ( Cascading Style Sheets — CSS ) или темами. • Каскадные таблицы стилей обеспечивают межплатформенное решение для форма тирования веб-страниц, которое работает в HTML или XHTML и поддерживается прак тически всеми современными браузерами.
Создание таблицы стилей слайд 1/2 • Чтобы ис пытать ее в действии и добавить (почти) пустую таблицу стилей в веб-проект, в Visual Studio следует выбрать пункт меню Website -> Add New Item (Веб-сайт->Добавить новый элемент) (или пункт меню Project -> Add New Item (Проект->Добавить новый элемент), если используется модель веб-проекта). Затем выбрать элемент Style Sheet (Таблица стилей), указать нужное имя файла и щелкнуть на кнопке ОК.
Создание таблицы стилей слайд 2/
Использование таблицы стилей • • •
This control uses the block. Text style. This с ontrol uses the block. Text style. This control uses the block. Text style.
Темы • Правила CSS ограничены фиксированным набором атрибутов стилей. Они позволяют повторно использовать специфические нюансы форматирования (шрифты, границы, цвета переднего плана и фона и т. д. ), но явно не способны контролировать другие аспекты элементов управле ния ASP. NET. Например, Check. Box. List имеет свойства, которые управляют организа цией элементов в виде строк и столбцов. Хотя эти свойства влияют на внешний вид элемента управления, они находятся вне области действия CSS , поэтому их придется устанавливать вручную. Кроме того, вместе с форматированием может требоваться определить нужные аспекты поведения элемента управления. Например, разработчику может понадобится стандартизировать режим выбора элемента управления Calendar или перенос текста в окне Text. Box. Понятно, что решить такие задачи с помощью CSS не получится. • Темы ( theme ) заполняют этот пробел. Как и CSS , темы позволяют определять набор атрибутов сти лей, которые можно применять к элементам управ ления во многих страницах. Однако, в отличие от CSS , темы не реализуются браузером. Напротив, они являются встроенным решением ASP. NET , реа лизуемым на сервере. Хотя темы не заменяют сти ли, они обладают рядом возможностей, которые CSS не в состоянии предоставить.
Особенности тем • Темы создаются на основе элементов управ ления, а не HTML -разметки. В результате темы позволяют определять и повторно ис пользовать практически любое свойство эле мента управления. • Темы применяются на сервере. Когда тема применяется к странице, пользова телю отправляется окончательная стилизованная страница. Если используется таблица стилей, то браузер получает информацию о странице и стиле, а затем объединяет их на стороне клиента. • Темы могут применяться через конфигурационные файлы. Это обстоятельство позволяет применять тему ко всей папке или ко всему веб-сайту, не модифицируя одиночные веб-страницы. • Темы реализуют каскадирование иначе, чем CSS. В основном, если свойство оп ределено в теме и в отдельном элементе управления, то значение в теме перепи сывает свойство в элементе управления. Однако это поведение можно изменить и отдать предпочтение свойствам страницы, что делает поведение тем более похо жим на поведение таблиц стилей.
Папки тем и обложки • Все темы специфичны для приложений. Чтобы использовать тему в веб-приложе нии, нужно создать папку, которая определяет данную тему. Эта папка должна быть по мещена в папку App Themes, размещенную внутри каталога верхнего уровня веб-при ложения. Иначе говоря, веб-приложение по имени Super. Commerce могло бы содержать тему Funky. Theme в папке Super. Commerce \ App _ Theme \ Funky. Theme. • Приложение может содержать определения нескольких тем при условии, что каждая тема будет храниться в отдельной папке. На отдельно взятой странице одновременно может быть активной только одна тема. Динамическое изменение активной темы во время обработки страницы описано ниже. • Чтобы тема действительно могла выполнять какие-либо действия, понадобится соз дать хотя бы один файл обложки (skin) в папке темы. Файл обложки представляет собой текстовый файл с расширением . skin. ASP. NET никогда не работает с файлами обло жек напрямую — они используются «за кулисами» для определения темы. • Файл обложки представляет собой список дескрипторов элементов управле ния, но с одной характерной особенностью. Дескрипторы элементов управления в фай ле обложки не обязательно должны определять полностью элемент управления. Вместо этого они должны устанавливать только те свойства, которые требуется стандартизиро вать. Например, если требуется применить единообразную цветовую схему, то интерес могут представлять только такие свойства, как Fore. Color и Back. Color. При добавлении дескриптора элемента управления List. Box, он может выглядеть следующим образом: • • Часть runat=»server» является обязательной, а все остальное — нет. Атрибут id для темы неприменим, т. к. он необходим для уникальной идентификации каждого эле мента управления в реальной веб-странице. • Разработчик должен принять решение — создавать множество файлов обло жек или же помещать все дескрипторы элементов управления в один такой файл. Оба подхода эквивалентны, поскольку ASP. NET обрабатывает все файлы обложек в каталоге темы как часть одного и того же определения темы. Часто дескрипторы сложных эле ментов управления (таких как элементы управления данными) целесообразно разделять на отдельные файлы обложек.
Применение простой темы слайд 1/2 • Чтобы добавить тему в проект, следует выбрать пункт меню Website -> Add New Item (Веб сайт-> Добавить новый элемент) (или Project -> Add New Item (Проект->Добавить новый элемент)), а затем элемент Skin File (Файл обложки). Visual Studio предупредит о том, что файлы обложек должны быть помещены в подпапку App Themes , и запросит, тре буется ли сделать это. При выборе ответа Yes (Да) среда Visual Studio создаст папку с тем же именем, что и у файла темы. После этого папке и файлу можно назначить любые подходящие имена.
Применение простой темы слайд 2/2 • Visual Studio не поддерживает создание тем во время проектирования, поэтому ко пировать и вставлять дескрипторы элементов управления из других веб-страниц при дется вручную. Ниже приведен пример обложки, которая устанавливает цвета изобра жения и фона для нескольких обычно используемых элементов управления: • Чтобы применить тему к веб-странице, атрибуту Theme директивы Page нужно при своить имя папки своей темы. ( ASP. NET автоматически просмотрит все файлы обложек в этой теме. ) •
Конфликты темы • При возникновении конфликта между свойствами элементов управления и темы предпочтение отдается теме. Однако в некоторых случаях может потребоваться изменить это поведение, чтобы элементы управления могли уточнять тему, замещая определенные ее нюансы. ASP. NET предоставляет такую возможность, хотя и по принципу «все или ничего» — произведенное изменение применяется ко всем элементам управления целой страницы. • Чтобы внести это изменение, достаточно в директиве Page вместо атрибута Theme использовать атрибут Style. Sheet. Theme. Например: • • Теперь нестандартный желтый цвет фона окна списка List. Box получает преиму щество над цветом фона, указанным в теме. Поскольку цвет изображения был изменен на белый, чтение стало затруднительным. Перекрытие спецификаций форматирования может вызвать затруднения подобного рода, поэтому часто лучше с помощью атрибута Theme предос тавить темам всю полноту управления. • Еще один вариант — конфигурирование отдельных элементов управления таким образом, чтобы полностью их исключить из процесса формирования темы. Для этого потребуется просто присвоить свойству Enable. Theming элемента управления значе ние false. ASP. NET применит тему к остальным элементам управления на странице, но пропустит сконфигурированный вами элемент управления. •
Множество обложек одного элемента управления • Ограничение всех элементов управления единым форматом — прекрасный спо соб стандартизации, но этот подход недостаточно гибок для реальных приложений. Например, может существовать несколько типов текстовых полей, которые различают ся по месту их использования или по типу содержащихся в них данных. Вероятность наличия различных вариантов надписей еще выше — они могут применяться как в за головках, так и в основном тексте. К счастью, ASP NET позволяет создавать несколько объявлений для одного и того же элемента управления. • Обычно при создании более одной темы для одного элемента управления ASP. NET выведет сообщение об ошибке сборки, в котором будет сказано, что для каждого элемен та управления может существовать только одна обложка по умолчанию. Чтобы обой ти эту проблему, необходимо создать именованную обложку, указав атрибут Skin. ID. Например : • Именованные обложки не применяются автоматически как обложки по умолчанию. Чтобы использовать именованную обложку, на веб-странице понадобит ся установить атрибут Skin. ID элемента управления. Это значение можно выбрать из раскрывающегося списка, который Visual Studio создает на основе имен всех опреде ленных обложек, либо ввести вручную:
Обложки с шаблонами и изображениями слайд 1/2 • В файле обложки можно создать более подробные дескрипторы элементов управления. Большинство свойств элементов управления поддерживают темы. Если свойство нельзя объявить в теме, то при попытке запуска приложения возникнет ошибка сборки. • Например, многие элементы управления поддерживают стили, которые указывают диапазон применения информации о форматировании. Одним из примеров являются элементы управления данными, а другим — элемент управления Calendar (календарь). Ниже показано, как стили элемента управления Calendar можно определить в файле обложки, чтобы они соответствовали теме:
• Эта обложка определяет шрифт, цвета и стили элемента управления Calendar. Оно устанавливает также режим выбора, форматирование ссылок навигации по месяцам и общий размер календаря. В результате, чтобы использовать этот отформатированный календарь, понадобится только следующий простой дескриптор: •
Обложки с шаблонами и изображениями слайд 2/2 • Еще один действенный подход — повторное использование изображений, когда они делаются частью темы. Предположим, что на веб-сайте нужно использовать одно изо бражение для кнопок ОК, а другое — для всех кнопок Cancel (Отмена). Для реализации такого дизайна первым делом понадобится добавить изображения в папку темы. Для лучшей организации целесообразно создать одну или более подпапок специально для хранения изображений. • Теперь нужно создать обложки, которые будут использовать эти изображения. В дан ном случае оба эти дескриптора должны быть именованными темами. Причина в том, что мы определяем особый тип стандартизированной кнопки, которая должна быть доступна на странице при необходимости, а не стиль, который должен применяться ко всем кнопкам. • При добавлении ссылки на изображение в файл обложки всегда необходимо проверять, что URL-адрес изображения указан относительно папки темы, а не папки, в которой хра нится страница. Когда эта тема будет применяться к элементу управления, ASP. NET ав томатически вставит часть Themes \Имя_Темы в начало URL-адреса. • Теперь, чтобы применить эти изображения, достаточно создать на своей веб-стра- нице элемент управления Image. Button, который будет ссылаться на соответствующее имя обложки:
Тема и каскадные таблицы стилей ASP. NET позволяет также использовать таблицу стилей в качестве части темы. Потребность в этой возможности может возникнуть по нескольким причинам. • Требуется выработать стиль HTML -элементов, которые могут не соответствовать серверным элементам управления. • Предпочтительнее применять таблицу стилей, потому что она является более стандартизированной или может использоваться также для форматирования ста тических HTML -страниц. • Для создания таблицы стилей уже были затрачены значительные усилия, поэтому создавать темы для выполнения того же форматирования нежелательно. • Для использования в теме таблица стилей сначала должна быть добавлена в папку темы. ASP. NET произведет поиск файлов. css в этой папке и динамически свяжет их с любой страницей, на которой используется эта тема. Чтобы связать страницу с таб лицей стилей, среда ASP NET должна иметь возможность вставить дескриптор в раздел веб-страницы. Это возможно только в том случае, если дескриптор имеет атрибут runat=»server» :
Untitled Page В результате элемент превращается в элемент управления серверной сторо ны, который ASP NET может модифицировать для вставки ссылок таблицы стилей. Как только это будет сделано, для получения доступа к правилам таблицы стилей достаточ но установить атрибут Theme страницы. Затем можно установить свойство Css. Class элементов управления, которые требуется форматировать. Любые правила стилей, связанные непосредственно с HTML -дескрипторами, применяются автоматически. В теме можно иметь столько таблиц стилей, сколько требуется. ASP NET добавит не сколько дескрипторов — по одному для каждой таблицы стилей, используемой в теме.
Динамическое применение тем слайд 1/3 В некоторых случаях темы используются не для стандартизации внешнего вида веб сайта, а для предоставления пользователям возможности его настройки. В этом случае веб-приложение позволяет указывать тему, которая будет применена к страницам. Все, что понадобится сделать — это динамически установить свойство Page. Theme или Page. stylesheet в коде. Этот шаг должен быть выполнен во время генерации события Page. Prelnit. После него по пытка задания этого свойства вызовет исключение. Ниже приведен пример, в котором динамическая тема применяется за счет чтения имени темы из текущей коллекции Session: protected void Page_Pre. Init(object sender, Event. Args e) { if (Session[«Theme»] == null) { Page. Theme = «»; } else { Page. Theme = (string)Session[«Theme»]; } }
Динамическое применение тем слайд 2/3 • Если требуется создать страницу, которая позволит пользователям выбирать тему, придется прибегнуть к одному ухищрению. Сложность в том, что выбор, произведенный пользователем, нельзя прочитать до окончания загрузки страницы и завершения эта па Prelnit. Однако на этом этапе устанавливать тему уже слишком поздно. Одним из способов решения этой проблемы является обновление страницы, при котором стра ница переадресуется к себе самой. Наиболее эффективный прием — воспользовать ся методом Server. Transfer(), чтобы вся обработка происходила на сервере.
Динамическое применение тем слайд 3/3 protected void Page_Load(object sender, Event. Args e) { if (!Page. Is. Post. Back) { Directory. Info theme. Dir = new Directory. Info(Server. Map. Path(«App_Themes»)); lst. Themes. Data. Text. Field = «Name»; lst. Themes. Data. Source = theme. Dir. Get. Directories(); lst. Themes. Data. Bind(); } } protected void cmd. Apply_Click(object sender, Event. Args e) { Session[«Theme»] = lst. Themes. Selected. Value; Server. Transfer(Request. File. Path); }
Стандартизация компоновки Стандартизация форматирования веб-сайта — это только половина дела. Нужно еще обеспечить, чтобы общие элементы, такие как верхний колонтитул веб-сайта и элемен ты управления навигацией, появлялись на каждой странице в одном и том же месте. Задача состоит в том, чтобы создать простую и гибкую компоновку, которую мож но было бы воспроизводить во всем веб-сайте. Для этого предназначены три основных подхода. • Пользовательские элементы управления позволяют определить pagelet — часть веб-страницы, содержащую код разметки и код, выполняемый на стороне сервера, которую можно повторно использовать во множестве веб-форм по своему усмотрению. Пользовательские элементы управле ния прекрасно подходят для стандартизации общего элемента страницы. Однако сами по себе они не могут решить проблему компоновки, поскольку невозможно добиться того, чтобы пользовательские элементы управления располагались в од ном и том же месте на каждой странице. • HTML -фреймы. Фреймы являются базовым инструментом HTML , с помощью ко торого в окне браузера можно одновременно отображать более одной страницы. Главный недостаток фреймов связан с тем, что получение каждой страницы про исходит посредством отдельного запроса к серверу, поэтому код каждой страницы должен быть полностью независимым. • Мастер-страницы — это средство ASP. NET , разработанное спе циально для стандартизации компоновки веб-страниц. Мастер-страницы пред ставляют собой шаблоны веб-страниц, которые могут определять фиксированное содержимое и объявлять часть веб-страницы, куда можно помещать нестандарт ное содержимое. При использовании одной и той же мастер-страницы во всем веб-сайте компоновка гарантированно будет одинаковой. В ASP. NET использование мастер-страниц является предпочтительным вариантом стандартизации компоновки веб-сайта.
Основы мастер-страниц Чтобы можно было обеспечить практическое и гибкое решение для создания шабло нов страниц, должен быть удовлетворен ряд требований. • Должна существовать возможность определения части страницы отдельно и по вторного ее использования во множестве страниц. • Должна существовать возможность создания фиксированной компоновки, опре деляющей редактируемые области. В страницах, повторно использующих этот шаблон, можно будет добавлять или модифицировать содержимое только в раз решенных областях. • Должна быть возможность ограниченной настройки элементов, повторно исполь зуемых на каждой странице. • Должна существовать возможность связывания страницы с шаблоном страницы декларативно (без кода) или со страницей динамически во время выполнения. • Должна обеспечиваться возможность проектирования страницы, использующей шаблон страницы, с помощью таких инструментов, как Visual Studio. Мастер-страницы соответствуют всем этим требованиям. Они обеспечивают систе му для повторного использования шаблонов, способ ограничения модификации шабло нов и широкую поддержку во время проектирования. Чтобы это все работало, в ASP. NET определены два новых типа страниц: мастер-страницы и страницы содержимого. Мастер-страница представляет собой шаблон страницы. Как и обычная веб-страница ASP. NET , она может содержать любую комби нацию HTML , веб-элементов управления и даже кода. Кроме того, мастер-страницы могут включать заполнители содержимого — определенные модифицируемые области. Каждая страница содержимого ссылается на одну мастер-страницу и получает ее ком поновку и содержимое. Также страница содержимого может добавлять характерное для страницы содержимое в любые заполнители. Другими словами, страница содержимого заполняет отсутствующие части, которые не определены в мастер-странице. Например, на обычном веб-сайте мастер-страница может включать фиксированный элемент, например, верхний колонтитул, и заполнитель содержимого для остальной части страницы. Страница содержимого получает этот колонтитул и предоставляет до полнительное содержимое.
Простая мастер-страница • Чтобы создать мастер-страницу в Visual Studio , следует выбрать пункт меню Websites -> Add New Item (Веб-сайт -> Добавить новый элемент). Затем указать элемент Master Page (Мастер-страница), назначить имя (например, Site. Template. master ) и щелкнуть на кнопке Add (Добавить). • Мастер-страница подобна обычной веб-форме ASP. NET. Как и веб-форма, мастер-страница может включать HTML -разметку, веб-элементы управления и код (встроен ный блок сценария либо отдельный файл). Одно различие между ними заключается в том, что веб-формы начинаются с директивы Page, » а мастер-страница — с директивы Master, определяющей ту же информацию: • • Другое различие между мастер-страницами и обычными веб-формами состоит в том, что мастер-страницы могут использовать элемент управления Content. Place. Holder, а обычные страницы — нет. Content. Place. Holder является частью страницы, в которую страница содержимого может вставлять содержимое.
Создание мастер-страницы • При создании новой мастер-страницы в Visual Studio процесс начинается с создания пустой страницы, включающей два элемента управления Content. Place. Holder. Один определен в разделе , благодаря чему страницы содержимого получают возмож ность добавлять метаданные страницы, такие как ключевые слова поиска или ссылки на таблицы стилей. Второй, более важный, элемент управления Content. Place. Holder определен в разделе и представляет видимое содержимое страницы. Он ото бражается на странице как прямоугольник с нестандартным контуром. Если щелк нуть внутри него или задержать над ним указатель мыши, имя элемента управления Content. Place. Holder отобразится в подсказке. Чтобы создать более слож ные компоновки страницы, можно добавить дополнительную разметку и элементы управления Content. Place. Holder.
Пример мастер-страницы
Untitled Page
Простая страница содержимого слайд 1/2 • Для использования созданной мастер-страницы в другой веб-странице необходи мо добавить атрибут Master. Page. File к директиве Page. Этот атрибут показывает имя файла требуемой мастер-таблицы: • • Атрибут Master. Page. File начинается с пути. /, который указывает корневую папку веб-сайта. • Установки атрибута Master. Page. File недостаточно для преобразования простой страницы в страницу содержимого. Единственная обязанность страницы содержимого — определение содержимого, которое будет вставлено в один или несколько элементов управления Content. Place. Holder. Страница содержимого не определяет страницу, поскольку внешняя оболочка уже предоставлена мастер-страницей. • Чтобы предоставить содержимое для элемента управления Content. Place. Holder, используется другой специализированный элемент управления, называемый Content. Для каждого элемента управления Content. Place. Holder в мастер-странице страница содержимого предоставляет соответствующий элемент управления Content (если для данной области вообще должно предоставляться содержимое). ASP. NET связывает элемент управления Content с соответствующим элементом управления Content. Place. Holder , сопоставляя ID элемента Content. Place. Holder со свойством Content. Place. Holderl. D соответствующего элемента управления Content. Если создать элемент управления Content, который будет ссылаться на несуществующий элемент управления Content. Place. Holder, во время выполнения возникнет ошибка. • Таким образом, чтобы создать полную страницу содержимого, которая использует мастер-страницу Site. Template , нужно просто заполнить содержимое для элемента управления Content. Place. Holder с идентификатором Content. Place. Holder 1.
Простая страница содержимого слайд 2/2 • • •
• Far out in the uncharted backwaters of the unfashionable end of the western spiral arm of the Galaxy lies a small unregarded yellow sun.
• • Custom Title
Форматирование и мастер-страницы • можно подключиться к мастер-странице, не используя темы, за счет до бавления элемента в раздел мастер-страницы. Таким образом, таблица стилей будет автоматически применяться ко всем страницам содержимого, которые используют данную мастер-страницу. • Можно также воспользоваться более детальной моделью, благодаря которой мастер-страница поможет применять различное форматирование к разным разделам страницы содержимого. Для этого достаточно установить подходящие цвета фона и переднего плана, шрифты и опции вырав нивания с помощью дескрипторов контейнера в мастер-странице. Например, их можно задать в таблице, ячейке таблицы, дескрипторе
или в элементе управления Panel. После этого информация из страницы содержимого может беспрепятственно передаваться в эти контейнеры, автоматически принимая подходящие атрибуты стилей. • Для динамического конфигурирования мастер-страницы или страницы содержимо го можно воспользоваться событием Page. Load в любом классе. В некоторых случаях код инициализации придется помещать и в мастер-страницу, и в страницу содержимо го. В таких ситуациях важно понять порядок, в котором генерируются соответствующие события. Сначала ASP. NET создает элементы управления для мастер-страницы, а затем дочерние элементы управления для страницы содержимого. После этого генерируется событие Page. Init для мастер-страницы, а за ним — такое же событие для страницы содержимого. Аналогичная последовательность имеет место и для события Page. Load. Таким образом, в случае возникновения конфликта настройки, выполняемые в стра нице содержимого (например, изменение заголовка страницы), получают преимуще ство по сравнению с изменениями, которые выполняются на этом же этапе в мастер-странице.
Содержимое по умолчанию • Когда мастер-страница определяет элемент управления Content. Place. Holder, она может также включать содержимое по умолчанию — содержимое, которое будет исполь зовано только в том случае, если страница содержимого не предоставит соответствую щий элемент управления Content. • Чтобы добиться этого эффекта, достаточно поместить соответствующие элементы управления HTML или веб-элементы управления в дескриптор Content. Place. Holder. • Ниже приведен пример, в котором содержимое по умолчанию добавляется к тексту баннера из предыдущего примера: • Master Pages Website • Если страница содержимого создается в Visual Studio , никаких не медленных изменений отображено не будет. Visual Studio автоматически создает дескриптор для каждого элемента управления Content. Place. Holder. Если страница со держимого включает дескриптор , он автоматически замещает содержимое, используемое по умолчанию. Однако если дескриптор удалить, отобразится содержимое по умолчанию — новый текст баннера » Master Pages Website «.
Мастер-страницы и компоновка таблицами и CSS слайд 1/3 • По большей части, в HTML используется потоковая компоновка. Это значит, что по мере добавления содержимого страница реорганизуется, приводя к растягиванию ос тального содержимого. Такая компоновка может затруднить получение желаемого ре зультата, когда применяются мастер-страницы. Например, можно получить хорошую компоновку только лишь для того, чтобы деформировать структуру большим блоком информации, вставляемым в дескриптор . • Чтобы справиться с такими задачами, большинство мастер-страниц будут приме нять либо HTML -таблицы, либо CSS -позиционирование для управления компоновкой. • При использовании таблиц вся страница или ее часть разбивается на столбцы и строки. Если затем добавить Content. Place. Holder в одну ячейку, то остальное содержи мое будет выровнено более-менее удовлетворительно. При CSS -позиционировании со держимое разбивается на дескрипторы
, которые затем либо позиционируются по абсолютным координатам, либо располагаются вдоль одной из сторон страницы. После этого элемент управления Content. Place. Holder помещается в дескриптор
. • В следующем примере демонстрируется использование мастер-страниц для созда ния традиционного веб-приложения с верхним и нижним колонтитулами и панелью навигации, которые определены с помощью таблиц.
Мастер-страницы и компоновка таблицами и CSS слайд 2/3
Мастер-страницы и компоновка таблицами и CSS слайд 3/3 • Многие профессиональные веб-разработчики предпочитают пользоваться более современными технологиями компоновки на основе CSS. Компоновка на основе CSS позволяет писать код разметки, который гораздо легче читать и пересматривать в будущем. • К счастью, применение элемента управления Content. Place. Holder в компоновках на основе CSS столь же просто, как и в компоновках на основе таблиц. Вместо того чтобы помещать объекты Content. Place. Holder в ячейки таблицы, их помещают в от дельные элементы
. После этого таблица стилей применит позиционирование к каждому элементу
с помощью атрибутов position, left, right, top и bottom. • Например, часто встречается дизайн страницы, при котором она делится на три столбца. Для столбцов у краев страницы устанавливается фиксированный размер, а столбец в середине занимает остальное место. • Ниже показан пример таблицы стилей, которая воплощает этот дизайн, создавая у обеих сторон страницы панели шириной по 150 пикселей. . left. Panel { position: absolute; top: 70 px; left: 10 px; width: 150 px; }. right. Panel { position: absolute; top: 70 px; right: 10 px; width: 150 px; }. center. Panel { margin-left: 151 px; margin-right: 151 px; padding-left: 12 px; padding-right: 12 px; } • Теперь страницу можно разделить на колонки с помощью стилей и поместить Content. Place. Holder в соответствующую область. Например, левую панель можно было бы использовать для навигационных элементов управления, правую панель — для рекла мы, а среднюю — для информации, которая предоставляется страницей содержимого:
. . .
. . .
Вложенные мастер-страницы слайд 1/3 • Мастер-страницы можно вкладывать так, чтобы одна мастер-страница использова ла другую мастер-страницу. • Например, веб-сайт может содержать два раздела. Для каждого раздела могут понадобиться собственные элементы управления навигацией. Каждому из разделов необходим один и тот же верхний колон титул. В этой ситуации можно создать мастер-страницу верхнего уровня, добавляющую верхний колонтитул. Например:
Untitled Page
Вложенные мастер-страницы слайд 2/3 • После этого можно создать вторую мастер-страницу, которая будет использовать первую мастер-страницу (через атрибут Master. Page. File ). Вторая мастер-страница получит верхний колонтитул от первой мастер-страницы и может добавить элементы управления навигации в панель в левой части окна. Например :
Вложенные мастер-страницы слайд 3/3 • Не исключено, что может понадобиться создать нескольких версий второй мас тер-страницы — по одной для каждого раздела веб-сайта. Эти версии должны были бы получать один и тот же стандартный заголовок. И, наконец, каждая страница содержи мого может использовать одну из мастер-страниц второго уровня для стандартизации своей компоновки: This is the nested content! Уровней вложенности мастер-страниц может быть столько, сколько необходимо. Однако такой может доставить больше хлопот, чем кажется на первый взгляд. Например, иерархию мастер-страниц придется переработать, если впоследствии окажется, что два раздела веб-сайта нуждаются в аналогичных, но слегка отличающихся друг от друга верхних колонтитулах. Поэтому целесообразно применять только один уровень мастер-страниц и копировать несколько общих элементов.
Основы безопасности ASP. NET • Безопасность — важнейшая часть веб-приложений, и она должна приниматься во внимание с первого этапа процесса разработки. По сути, безопасность — это все, что касается защиты разработанного программного продукта от неавторизованных действий. И для ее обес печения используется несколько механизмов, включая идентификацию пользователей, выдачу или отзыв прав доступа к важным ресурсам, а также защиту информации, хра нящейся на сервере и передающейся по сети. Во всех этих случаях необходима некая фундаментальная платформа, обеспечивающая базовую функциональность безопасно сти. ASP. NET удовлетворяет эту потребность благодаря встроенным средствам, которые можно применять для обеспечения защиты своих приложений. • Платформа безопасности ASP. NET включает классы для аутентификации и авториза ции пользователей, а также для обращения с аутентифицированными пользователями в приложениях. Она также включает высокоуровневую модель для управления пользо вателями и ролями, как программно, так и с помощью инструментов администрирова ния. Более того, платформа. NET Framework сама по себе предоставляет набор базовых классов для обеспечения конфиденциальности и целостности через шифрование и циф ровые подписи.
Понятие потенциальных угроз • Создание безопасной архитектуры и проектного решения требует глубокого пони мания среды приложения. Построить безопасное программное обеспечение не удастся, если не известно, кто имеет доступ к приложению и где находятся уязвимые места для атак. Таким образом, наиболее важный фактор для создания безопасной программной архитектуры и проектного решения заключается в хорошем понимании таких факторов среды, как пользователи, точки входа и потенциальные угрозы с точками для атаки. • Именно поэтому моделирование угроз становится все более важным в современном процессе разработки программного обеспечения. Моделирование угроз — это структу рированный способ анализа среды приложения с точки зрения возможных опасностей, классификация угроз и решение относительно приемов их смягчения. При таком подхо де решения относительно технологий безопасности (таких как аутентификация и SSL — шифрование) всегда имеет действительное основание — потенциальную угрозу. • Однако моделирование угроз важно по еще одной причине. Как известно, не все потенциальные угрозы могут быть смягчены применением технологий защиты, такими как аутентификация и авторизация. Другими словами, некоторые из них вооб ще невозможно разрешить технически. Например, банковское онлайновое решение мо жет использовать SSL для защиты трафика веб-сайта. Но как пользователи могут знать, что они действительно используют банковскую страницу, а не хакерский поддельный веб-сайт? Хорошо, единственный способ убедиться в этом — проверить сертификат, ис пользуемый для установки канала SSL. Но пользователи должны быть предупреждены об этом, а потому их каким-либо образом необходимо информировать. Поэтому «техника смягчения» угроз — это не только технологии защиты. Это включает требование того, чтобы все пользователи знали, как проверить сертификат. Моделирование угроз — метод анализа, помогающий выявить обстоятельства вроде этих, а не только факторы техни ческого порядка. Тема моделирования угроз является очень обширной и выходит за рамки данного учебного пособия.
Правила безопасного кодирования • Никогда не доверяйте пользовательскому вводу. Предполагается, что каждый пользователь является злоумышленником, пока он не докажет обратное. Таким образом, необходимо всегда строго проверять пользовательский ввод. • Никогда не используйте конкатенацию строк для формирования операторов SQL. Необходимо всегда использовать параметризованные операторы, чтобы приложение не было уязвимо для атак внедрением SQL. • Никогда не выводите данные, введенные пользователем, на веб-страницу перед их проверкой и кодированием. Пользователь может ввести некоторые фрагменты кода HTML (например, сценарии), которые инициируют межсайтовую сценарную уязвимость. • Никогда не размещайте важные данные, критичную для бизнеса информацию либо данные, касающиеся внутренних правил безопасности, в скрытых полях веб-страницы. Скрытые поля могут быть легко изменены простым просмотром исходного кода веб-страницы, модификацией и сохранением в файле. • Никогда не сохраняйте важные или критичные для бизнеса данные в состоянии представления. С остояние представления — это просто еще одно скрытое поле на веб-странице, и оно может быть легко декодировано и просмотрено. Шифрование состояния представления помогает защитить информа цию, ценную только в течение ограниченного интервала времени, но следует помнить, что даже шифрованные данные однажды могут быть взломаны, если у зло умышленника есть достаточно времени, ресурсов и мотивации. • Включайте SSL при использовании базовой аутентификации или аутен тификации с помощью форм ASP. NET. • Защищайте cookie-наборы. Всегда защищайте cookie -наборы аутенти фикации при использовании аутентификации с помощью форм и устанавливайте таймауты насколько возможно короткими, и не длиннее, чем это действительно необходимо. • Применяйте SSL. В общем случае, если веб-приложение обрабатывает важные данные, защищайте весь веб-сайт с помощью SSL.
Понятие стража • Хороший способ повысить степень безопасности приложения — размещать компо ненты в таком месте, которое требует защиты. Концептуальный шаблон стража ( gate keeper ) применяет модель конвейера к организации инфраструктуры безопасности. Эта модель помогает укрепить безопасность. • Модель стражей предполагает, что безопасное приложение всегда имеет больше ме ханизмов защиты, чем это необходимо. Каждый из этих механизмов реализован в виде стража, отвечающего за проверку некоторых условий защиты. Если один из таких стра жей не сработает, то атакующий столкнется со следующим стражем в конвейере. И чем больше стражей имеется в разрабатываемом приложении, тем труднее приходится злоумышлен нику. На самом деле эта модель отвечает ключевому принципу создания безопасных приложений: обеспечивать насколько возможно высокую степень защиты и создавать максимум проблем нарушителям.
Уровни безопасности В основном для большей части веб-приложений основные задачи для реализации защиты (помимо идентифицированных во время моделирования угроз) всегда одни и те же. • Аутентификация. Прежде всего, необходимо аутентифицировать пользователей. Аутентификация задает вопрос: кто идет? В конечном итоге она определяет, кто работает с вашим приложением на другой стороне. • Авторизация отвечает на вопрос: каков уро вень допуска? • Конфиденциальность. Когда пользователь работает с приложением, необходимо гарантировать, что никто другой не сможет видеть важные данные, которые он обрабатывает. • Целостность. Необходимо гарантировать, что данные, передаваемые между клиентом и сервером, не изменяются в результате неавторизованного вме шательства.
Аутентификация • Аутентификация — процесс определения идентичности пользователя и обеспече ния гарантий этой идентичности. Процесс аутентификации аналогичен регистрации участников конференции. Во-первых, участник предъявляет некоторое свидетельство, до казывающее его идентичность (вроде паспорта или водительских прав). Во-вторых, как только идентичность проверена по этой информации, он получает личный значок участника конференции, или маркер , который постоянно носит с собой на протяже нии всей конференции. Любой, кто встретит его на конференции, сможет легко опреде лить его идентичность, взглянув на этот значок, который обычно содержит базовую идентифицирующую информацию, такую как имя и фамилия. Весь этот процесс — пример аутентификации. Как только идентичность установлена, маркер подтверждает ее везде в пределах конкретной области, личность владельца маркера будет известной.
Системы аутентификации В приложениях ASP. NET аутентификация реализуется одной из следующих возмож ных аутентифицирующих систем: • аутентификация Windows ; • аутентификация с помощью форм; • Аутентификация при помощи паспорта; • специальный процесс аутентификации. В каждом случае пользователь предъявляет некоторое удостоверение при регистра ции в системе. Идентичность пользователя отслеживается разными способами, в зави симости от типа аутентификации.
Заимствование прав • Заимствование прав ( impersonation ) — это процесс выполнения кода в контексте (или от имени) другого пользователя. По умолчанию код ASP. NET выполняется от име ни фиксированной, специфичной для конкретной машины, пользовательской учетной записи (обычно Network Service в IIS 7. x). Чтобы выполнить код с применением другой идентичности, можно воспользоваться встроенными в ASP. NET ВОЗМОЖНОСТЯМИ заимст вования прав. Можно применить предопределенную пользовательскую учетную запись либо предположить пользовательскую идентичность, если этот пользователь уже был аутентифицирован посредством учетной записи Windows. • Одна из причин, по которым может применяться заимствование, состоит в воз можности использования существующих учетных записей Windows с их привилегиями. Например, рассмотрим приложение, которое извлекает информацию из различ ных файлов, уже имеющих специфические для пользователей или групп наборы прав. Вместо того чтобы кодировать логику авторизации в своем приложении ASP. NET , можно воспользоваться заимствованием, полагаясь на идентичность конечного пользователя. Таким образом, Windows может выполнить авторизацию за пользователя, проверяя привилегии при попытке обратиться к файлу. Можно даже включать заимствование только на крат кий период времени вместо полного запроса.
Авторизация • Авторизация — это процесс определения прав и ограничений, назначенных аутентифицированному пользователю. В зависимости от идентифицирующей информации, доступ к запрашиваемым ресурсам либо открывает ся, либо закрывается. • Пример с конференцией представляет собой случай авторизации на основе ролей — когда авторизация определяется правами группы, к которой принадлежит пользова тель, а не на том, кто он такой. Во многих случая авторизация на основе ро лей предпочтительнее, поскольку ее гораздо легче реализовать.
Конфиденциальность и целостность слайд 1/2 • Конфиденциальность означает обеспечение невидимости данных для неавторизо ванных пользователей во время передачи их по сети или сохранении в хранилищах, таких как базы данных. Целостность — это обеспечение невозможности изменения данных никем во время передачи по сети или сохранения в хранилище. И то, и другое основано на шифровании. • Шифрование — процесс кодирования данных, делающий невозможным их чтение другими пользователями. Шифрование в ASP. NET является средством, полностью отде ленным от аутентификации, авторизации и заимствования прав. Его можно применять в комбинации с этими средствами либо самостоятельно.
Конфиденциальность и целостность слайд 2/2 • Как упоминалось ранее, шифровать веб-приложения может требоваться по двум причинам. • Для защиты коммуникаций (передачи данных через сеть). Например, необходимо сделать невозможной кражу номеров кредитных карт, используемых в системе электронной коммерции, по открытым каналам Интернета. Стандартный подход к решению этой проблемы предусматривает применение SSL. Кроме того, SSL реализует цифровые подписи для обеспечения гарантии целостности. SSL не реа лизован ASP. NET , а является средством, предоставляемым IIS. Код веб-страницы (или веб-службы) не зависит от того, используется SSL или нет. • Для защиты постоянной информации (в базе данных или в файле). Например, мо жет понадобиться сохранить номер кредитной карты пользователя в базе данных для будущего использования. Хранение таких данных в виде простого текста в надежде на то, что веб-сервер не будет взломан – не самая удачная идея. Вместо этого следует применять классы шифрования, которые предлагает. NET , и вруч ную шифровать данные перед их сохранением.
Процесс аутентификации 1. Запрос отправляется веб-серверу. Поскольку идентичность пользователя в этот мо мент не известна, ему предлагается зарегистрироваться с использованием специ альной веб-страницы или диалогового окна регистрации браузера. Специфические детали процесса регистрации зависят от типа применяемой аутентификации. 2. Пользователь предоставляет свое удостоверение, которое затем верифицирует ся — либо приложением (в случае аутентификации с помощью форм), либо автоматически средствами IIS (в случае аутентификации Windows ). 3. Если удостоверение пользователя подтверждается, ему предоставляется доступ к веб-странице. Если же оно оценивается как нелегитимное, ему предлагается по вторить попытку регистрации, либо же выполняется переадресация на страницу с сообщением о закрытии доступа.
Процесс аутентификации и авторизации 1. Запрос отправляется веб-серверу. Поскольку идентичность пользователя в этот мо мент не известна, ему предлагается зарегистрироваться с использованием специ альной веб-страницы или диалогового окна регистрации браузера. Специфические детали процесса регистрации зависят от типа применяемой аутентификации. 2. Пользователь предъявляет свое удостоверение, которое проверяется приложени ем. Это стадия аутентификации. 3. Удостоверение или роли аутентифицированного пользователя сравниваются со спи ском разрешенных пользователей и ролей. Если пользователь присутствует в спи ске, ему открывается доступ к ресурсу; в противном случае доступ будет закрыт. 4. Пользователи, которым отказано в доступе, либо приглашаются на повторную ре гистрацию, либо перенаправляются на веб-страницу с сообщением о закрытии доступа.
Понятие SSL • Технология SSL ( Secure Sockets Layer — уровень защищенных сокетов) позволяет шифровать коммуникации через HTTP. Протокол SSL поддерживается широким крутом браузеров и гарантирует, что передача информации между клиентом и веб-сервером не может быть расшифрована злоумышленниками. SSL необходим для сокрытия важной информации, такой как номера кредитных карт и конфиденциальные сведения внут реннего характера, но также важен и для аутентификации пользователей. Например, если создается страница регистрации, на которой пользователь отправляет свое имя и пароль, то необходимо применять SSL для шифрования этой информации. В противном случае злоумышленник сможет перехватить удостоверение пользователя и воспользо ваться им для проникновения в систему. • Веб-сервер IIS предоставляет SSL как встроенную, готовую к использованию службу. Поскольку SSL работает под HTTP , его применение не изменяет способа работы с HTTP — запросами. Все шифрование и дешифрацию берут на себя функциональные средства SSL программного обеспечения веб-сервера (в данном случае — IIS ). Единственное от личие состоит в том, что адрес, защищенный SSL , начинается с https : //, а не http : //. Трафик SSL также проходит через другой порт (обычно веб-серверы используют порт 443 для SSL -запросов и порт 80 — для обычных запросов).
Понятие сертификата • Прежде чем пересылать важные данные, клиент должен решить, можно ли доверять веб-сайту. Для этой достижения этой цели были спроектированы сертификаты, кото рые позволяют частично верифицировать идентичность пользователя. Сертификаты могут быть установлены на компьютере любого типа, но обычно они находятся на веб-серверах. • Организация приобретает сертификат у известного центра сертификации ( Certificate Authority — СА) и устанавливает его на своем веб-сервере. Клиент доверяет СА и потому готов доверять информации сертификата, подписанного СА. Эта модель работает дос таточно хорошо, т. к. маловероятно, чтобы злоумышленник решился на дополнительные расходы по приобретению и установке фальсифицированного сертификата. Центр сер тификации также сохраняет информацию о каждом зарегистрированном пользовате ле. Однако наличие сертификата никоим образом не гарантирует надежность сервера, безопасность приложения или легитимность бизнеса. В этом смысле область действия сертификатов фундаментально ограничена.
Содержимое сертификата Сам по себе сертификат содержит некоторую идентифицирующую информацию. Он подписывается защищенным ключом СА, что гарантирует его аутентичность и от сутствие модификаций. Промышленный стандартный сертификат, соответствующий x. 509 v 3, включает следующую базовую информацию: • имя, название организации и адрес держателя; • открытый ключ держателя, который будет использоваться для реализации ключа SSL -сеансов для шифрования коммуникаций; • даты проверки сертификата; • серийный номер сертификата. • В дополнение сертификат также может включать специфичную для бизнеса инфор мацию, такую как отрасль промышленности держателя, длительность присутствия его на рынке и т. п. Двумя крупнейшими центрами сертификации являются: • Thawte — http: //www. thawte. com • Veri. Sign — http: //www. verisign. com Если функция проверки идентичности СА не нужна (например, если сертификаты используются только в корпоративной сети), можно создать и пользоваться собствен ными сертификатами, настроив всех клиентов на доверие к ним. Для этого потребуется служба Active Directory и сервер Certificate Server , встроенные в серверную опера ционную систему Windows.
Аутентификация форм • Аутентификация с помощью форм — это система аутентификации общего назна чения, основанная на двух концепциях. Первая из них — страница входа ( login page ), которая может удостоверить действительность пользователей (обычно сверяя комбина цию имени и пароля с базой данных или другим хранилищем данных). Вторая — это механизм предохранения и восстановления контекста безопасности при каждом запро се (обычно с применением cookie -н a б opa ). Таким образом, пользователю понадобится войти только один раз. • ASP. NET включает всю необходимую инфраструкту ру. Посредством аутентификации с помощью форм платформа ASP. NET создает cookie — набор безопасности для зарегистрированных пользователей, обслуживает их и автома тически поддерживает контекст безопасности для последующих запросов. Лучше всего то, что она управляет этим процессом эффективно и в высшей степени устойчиво про тивостоит подделкам.
Использование аутентификации форм • Когда пользователь запрашивает страницу ASP. NET , которая не доступна аноним ным пользователям, исполняющая среда ASP. NET проверяет, имеется ли билет аутен тификации с помощью форм. Если нет, производится автоматическая переадресация на страницу входа. С этого момента начинается работа разработчика. Он должен создать эту страницу входа и внутри нее проверить пользовательское удостоверение. Если пользо ватель успешно прошел проверку, достаточно просто сообщить инфраструктуре ASP. NET об ус пехе операции (вызвав метод класса Forms. Authentication ), после чего исполняющая среда автоматически устанавливает cookie -набор аутентификации (который в действи тельности содержит билет) и переадресует пользователя на запрошенную им страницу. С этим запросом исполняющая среда определяет, что cookie — Ha 6 op аутентификации с билетом имеется в наличии и открывает доступ к странице. Все, что понадобится сделать — это настроить аутентификацию с помощью форм в файле web. config , создать страницу входа и проверить внутри нее удостовере ние пользователя.
Преимущества аутентификации форм • Разработчик получает полный контроль над кодом аутентификации. Поскольку аутентификация с помощью форм реализована полностью внутри ASP. NET , разработчик получает полный контроль над выполнением аутентификации. Ему не нужно полагаться ни на какую внешнюю систему, как это имеет место при аутенти фикации Windows. Поведение аутентификации с помощью форм можно настроить под собственные нужды. • Разработчик получает полный контроль над внешним видом формы входа. Разработчик имеет ту же степень контроля над внешним видом аутентификации с помощью форм, что и над ее функциональностью. Другими словами, входную страницу входа можно оформлять как угодно. Однако если нет желания заниматься этим, можно воспользоваться высокоуровневым API -интерфейсом членства ( Membership API ) и эле ментами управления безопасностью ASP. NET. В число этих элементов управления вхо дит готовый к использованию и в высокой степени настраиваемый элемент управления Login. • Она работает с любым браузером. Аутентификация с помощью форм использует в качестве пользовательского интер фейса стандартный HTML , поэтому все браузеры могут его обработать. Поскольку форму входа можно форматировать произвольным образом, аутентификация с помощью форм применяется даже в браузерах, которые не используют HTML — например, в мобильных устройствах. Для этого понадобится определить используемый браузер и предоставить форму в подходящем формате для данного устройства (таком как WML для мобильных телефонов). • Для ввода и отправки пользовательского удостоверения аутентификация с помощью форм использует стандартные формы HTML. Это значит, что для шифрования и безопасной пе редачи этого удостоверения нужно применять SSL. В противном случае при обратной отправке данных на сервер информация передается как простой текст. • Она позволяет выбирать способ хранения информации о пользователях. Гкбкость в хранении информации о пользователях также означает возможность кон троля над созданием и администрированием пользовательских учетных записей, а также присоединения дополнительной информации к этим учетным записям, такой как персо нальные предпочтения по настройке внешнего вида веб-сайта.
Недостатки аутентификации форм • Разработчик должен самостоятельно создавать пользовательский интерфейс для регист рации пользователей. Можно либо целиком создать собственную страницу входа, либо использовать элементы управления безопасностью ASP. NET. • Разработчик должен поддерживать каталог удостоверений пользователей. • Разработчик должен предпринимать дополнительные предосторожности против вмеша тельства в сетевой трафик. • Первые два недостатка можно устранить за счет применения интерфейса Membership API , предоставляющего предварительно разработанные элементы управления и схему хранения удостоверений с готовым решением на основе SQL Server.
Классы аутентификации форм слайд 1/2 • Наиболее важная часть платформы аутентификации с помощью форм — Forms. Authentication. Module. Это класс Http. Module , который обнаруживает билеты аутентификации с помощью форм, присутствующие в запросе. Если такой билет не доступен, а пользователь запросил защищенный ресурс, то запрос автоматически пе ренаправляется на страницу входа, указанную в файле web. config , еще до того, как исполняющая среда даже просто коснется этого защищенного ресурса. • Если билет присутствует, модуль автоматически создает контекст безопасности, инициализируя свойство Http. Context. Current. User экземпляром Generic. Principal по умолчанию, который включает экземпляр Forms Identity с именем текущего заре гистрированного пользователя.
Классы аутентификации форм слайд 2/2 Имя класса Описание Forms. Authentication Основной класс для взаимодействия с инфраструктурой ау тентификации с помощью форм. Он предоставляет базовую информацию о конфигурации и позволяет создавать билет, устанавливать соо ki е-наборы и перенаправлять со стра ницы входа на исходную запрошенную страницу в случае успешной проверки удостоверения пользователя Forms. Authentication. Event. Args инициирует событие Authenticate, которое можно перехватить. Соглашения о передаваемых аргументах события инкапсулируются в эк земпляре этого класса. Содержит базовую информацию об аутентифицированном пользователе Forms. Authentication. Ticket Этот класс предоставляет информацию о пользователе, которая будет зашифрована и помещена в cookie -набор аутентификации Forms I dentity Этот класс реализует интерфейс IIdentity и являет ся специфичным для аутентификации с помощью форм. Ключевым дополнением класса Formsldentity , кро ме членов, необходимых для реализации интерфейса IIdentity , является свойство Ticket , представляющее билет аутентификации. Forms. Authentication. Module Ядро инфраструктуры аутентификации с помощью форм, устанавливающее контекст безопасности и выполняющее при необходимости автоматическое перенаправление на страницу входа
Реализация аутентификации форм 1. Сконфигурировать аутентификацию с помощью форм в файле web. config. 2. Настроить IIS для разрешения анонимного доступа к виртуальному каталогу, а также сконфигурировать ASP. NET для ограничения анонимного доступа к веб- приложению. 3. Создать собственную страницу входа, которая будет принимать и проверять имя и пароль пользователя, а затем взаимодействовать с инфраструктурой аутенти фикации с помощью форм для создания билета.
Конфигурирование аутентификации • Разработчик должен надлежащим образом сконфигурировать аутентификацию с помощью форм в файле web. config. Выше, что каждый файл web. config включает раздел конфигурации . Аутентификация с помощью форм будет работать, если в этом разделе указать для атрибута mode значение Forms : • Конфигурация ограничена только файлом web. config высшего уровня приложения. Если атрибут mode установлен в Forms , то ASP. NET загружает и активизирует модуль Forms. Authentication. Module , который выполнит большую часть работы. • В основном используются установки по умолчанию для аутентификации с помощью форм, которые жестко закодированы в ис полняющей среде ASP. NET. Чтобы переопределить эти настройки, следует добавить установки в раздел файла machine. config. Эти настройки можно переопределить в приложении, добавив свои установки в дочерний дескриптор этого раздела. 208
Опции аутентификации слайд 1/2 Опция Значение по умолчанию Описание name. ASPXAUTH Имя cookie -набора HTTP для использования в аутентификации (по умолчанию . ASPXAUTH). Если множество приложений работают на одном веб-сервере, каждому соо. Ие-набору безопасности каждого приложения должно быть назначено уникальное имя login. Url login. aspx Определяет, на какую страницу должен быть перенаправлен пользователь, чтобы войти в приложение. Это может быть страница в корневой папке приложения или же в каком- то подкаталоге timeout 30 Период времени в минутах действительно сти cookie -набора. ASP. NET обновит cookie — набор приеме запроса, когда истечет половина времени действия cookie -набора. sliding. Expiration false Этот атрибут включает и отключает сколь зящее устаревание cookie -наборов аутен тификации. При включении устаревание cookie -наборов будет сбрасываться испол няющей средой при каждом запросе стра ницы пользователем. Это значит, что каж дый запрос будет продолжать время жизни cookie -набора cookieless Use. Device. Profile Позволяет указать, должна ли исполняю щая среда использовать соо. Ие-наборы для отправки билетов аутентификации с помо щью форм клиенту. Возможные варианты: Auto. Detect, Use. Cookies, Use. Uri и Use. Device. Profile. protection All Позволяет указать уровень безопасности cookie -наборов аутентификации. Опция All шифрует и подписывает аутен- тифицирующие cookie -наборы. Другими возможными значениями являются None , Encryption (только шифрование) и Validation (только подпись)
Опции аутентификации слайд 2/2 require. SSL false Если установлено в true , это свойство дает тот эффект, что браузер просто не передает cookie -набор, если SSL не включен на веб сервере. Таким образом, аутентификация с помощью форм работать не будет, если SSL не активизирован на веб-сервере enable. Cross. App. Redirects false Разрешает переадресацию между разными приложениями на сервере при использо вании аутентификации с помощью форм. Конечно, это имеет смысл, только если оба приложения полагаются на одно и то же хранилище удостоверений и используют одинаковый набор пользователей и ролей default. Url Default. aspx Если Forms. Authentication. Module перенаправляет запрос от пользователя на страницу входа, то включает исходную за прошенную страницу при ее вызове. Таким образом, когда страница входа вернет управ ление, модуль сможет использовать этот URL для перенаправления на исходную запро шенную страницу после успешной проверки удостоверения пользователя. domain Указывает домен, для которого соо ki е-набор является допустимым. Переопределение это го свойства полезно, когда необходимо раз решить использование cookie -наборов для других приложений на веб-сервере path / Путь для cookie -наборов, указанный прило жением. Рекомендуется применять значение по умолчанию (/), поскольку это предотвра щает несовпадение регистра символов при пересылке в запросе
Хранение удостоверений в web. config • При использовании аутентификации с помощью форм существует выбор, где хра нить удостоверения пользователей. Их можно хранить в определенном файле или в базе данных; в принципе хранить их можно где угодно, если предусмотрен код для проверки имени и пароля пользователя, вводимых на странице входа, по значениям, находящим ся в хранилище. Проще всего хранить удостоверения пользователей непосредственно в файле web. config , в подэлементе конфигурационного дескриптора :
Закрытие доступа анонимным пользователям • Для использования аутентификации ограничивать доступ к страницам не обязательно. Аутентификацию можно применять только для целей персонализации, так что анонимные пользователи будут видеть те же страницы, что и аутентифицированные пользователи, но в персонализированном виде. Однако для демонстрации функциональности переадресации при аутентификации с помощью форм полезно разработать пример, закрывающий доступ анонимным пользователям. Это заставит ASP. NET перенаправлять анонимных пользователей на страницу входа. • Для этого используем про стую технику запрета доступа всем пользователям, не прошедшим аутентификацию. Для этого необходимо добавить новое правило авторизации к элементу в файле web. config :
Специальная страница входа
Событие страницы входа protected void Login. Action_Click(object sender, Event. Args e) { Page. Validate(); if (!Page. Is. Valid) return; if (this. My. Authenticate(Username. Text, Password. Text)) { Forms. Authentication. Redirect. From. Login. Page(Username. Text, false); } else { Legend. Status. Text = «Invalid username or password!»; } }
Выход пользователя из аутентификации с помощью формы сводится к простому вызову метода Forms. Authentication. Sign. Out (). Можно создать кнопку выхода и добавить в обработчик щелчка на ней следующий код: protected void Sign. Out. Action_Click(object sender, Event. Args e) { Forms. Authentication. Sign. Out(); Forms. Authentication. Redirect. To. Login. Page(); }
Специальное хранилище удостоверений Хранилище удостоверений в web. config подходит толь ко для простейших сценариев. Отказаться от использования web. config в качестве хранилища удостоверений можно по нескольким причинам. • Потенциальная нехватка защищенности. Несмотря на то, что пользователи не име ют возможности напрямую запрашивать файл web. config , предпочтение все-таки может быть отдано хранилищу с более эффективной защитой. • Отсутствие поддержки добавления специфичной для пользователя информации. Например, может понадобиться сохранять такую информацию, как адреса, номе ра кредитных карт, персональные предпочтения и т. п. • Низкая производительность при большом количестве пользователей. web. config — это всего лишь файл, и он не поддерживает эффективное кэширование и многопользовательский доступ, присущий базам данных. Более того, после ка ждого изменения файла web. config перезапускается Http. Application , что при водит к утере всех доменов приложений, состояний сеанса и т. д. Восстановление всего этого влияет на производительность. Таким образом, в большинстве приложений рекомендуется применять собственные хра нилища имен и паролей пользователей, и большей частью они будут находиться в ба зах данных вроде SQL Server. ASP. NET предлагает готовую к использованию инфраструктуру, а так же полный набор элементов управления, связанных с безопасностью. Платформа Membership API включает хранилище данных на основе SQL Server , в которое записы ваются пользователи и роли, а также функции для проверки имен и паролей, без необ ходимости знания подробностей устройства лежащей в основе базы данных. Она также включает элементы управления безопасностью, такие как готовый элемент Login , основанный на использовании Membership API.
Членство и Membership API • Аутентификация с помощью форм закладывает важный фунда мент реализации безопасных пользовательских форм входа для ваших приложе ний ASP. NET. С другой стороны, задачи, которые приходится решать разработчику в процессе создания форм входа и взаимодействия с лежащим в основе хранилищем удостовере ний, почти всегда одни и те же для каждого веб-приложения, и они достаточно утоми тельны. Следует иметь в виду и еще один момент: аутентификация с помощью форм предоставляет инфраструктуру только для аутентификации пользователей. В случае применения собственного хранилища удостоверений придется писать административ ные приложения для управления пользователями, в которых должна быть реализована функциональность добавления пользователей, удаления пользователей, сброса паролей и т. п. Реализация этой функциональности очень похожа во всех веб-приложениях и по тому быстро надоедает. • Для преодоления этой проблемы в ASP. NET 2. 0 было добавлено средство под назва нием Membership API (API-интерфейс членства), которое в ASP. NET 4, по сути, осталось без изменений. Интерфейс Membership API — это платформа, построенная на основе существующей инфраструктуры аутентификации с помощью форм. При использовании Membership API даже не понадобится реализовывать страницы входа или хранилища удостоверений.
Возможности Membership API Платформа Membership API предоставляет полный набор готовых функций управле ния пользователями. • Возможность создавать и удалять пользователей. • Возможность переустановки паролей с автоматической отправкой пользователям новых паролей по электронной почте. • Возможность автоматической генерации паролей для пользователей, если поль зователи создаются автоматически в фоновом режиме. • Возможность нахождения пользователей в лежащем в основе хранилище данных, а также извлечения списков пользователей и подробной информации о каждом их них. • Набор предварительно разработанных элементов управления для создания стра ниц входа и регистрации, а также для отображения состояния входа в различ ных представлениях для аутентифицированных и не аутентифицированных пользователей. • Уровень абстракции, который обеспечивает независимость приложений от кон кретного лежащего в основе хранилища данных через классы поставщиков член ства.
Архитектура Membership API
Классы Membership API 220 Компонент Описание Membership Класс Membership — центральная точка взаи модействия с Membership API. Он предоставляет ряд методов для управления пользователями, их проверки и переустановки паролей Membership. Create. User. Exception Исключение, генерируемое в случае возникнове ния ошибки при попытке создания пользователя классом Membership. User Представляет отдельного пользователя, записан ного в хранилище данных Membership API. Этот объект содержит всю информацию о пользователе и возвращается несколькими методами класса Membership, например, Get. User() Membership. User. Collection Коллекция пользователей Membership. Например, метод Get. Users класса Membership возвращает экземпляр этой коллекции Membership. Provider Базовый класс, от которого наследуются собст венные классы поставщиков членства, которые аутентифицируют пользователей по специальному хранилищу удостоверений Membership. Provider. Collection Коллекция доступных поставщиков членства на машине для данного веб-приложения Sql. Membership. Provider Реализация класса Membership. Provider, работающая с базами данных SQL Server Active. Directory. Membership. Provider Реализация класса Membership. Provider, работающая со службой Active Directory Active. Directory. Membership. User Класс, который наследует всю функциональность Membership. User и добавляет некоторые специ фичные для Active Directory свойства
Использование Membership API Прежде чем можно будет использовать интерфейс Membership API и элементы управ ления безопасностью ASP. NET, потребуется выполнить несколько шагов. – Сконфигурировать аутентификацию с помощью форм в файле web. config обыч ным образом и запретить доступ анонимным пользователям. – Настроить хранилище данных членства. Например, если используется SQL Server , то в базе данных SQL Server придется создать несколько таблиц и хранимых процедур. – Сконфигурировать в файле web. config строку подключения к базе данных и по ставщика членства, который должен использоваться. – Создать пользователей в хранилище данных членства с помощью веб-утилиты конфигурирования ASP. NET либо при помощи собственной страницы админи стрирования, которая может быть реализована в веб-приложении с применением функций Membership API. – Создать страницу входа, которая использует готовый элемент управления Login или класс Membership для проверки введенных удостоверений и аутентификации пользователей. • Все шаги по конфигурированию за исключением настройки поставщика можно выполнить с помощью ASP. NET WAT ( Web Site Administration Tool — инструмент адми нистрирования веб-сайтов), в состав которого входит мастер настройки безопасно сти. Выберите в меню Website (Веб-сайт) пункт ASP. NET Configuration (Конфигурация ASP. NET ) в среде Visual Studio.
Конфигурирование аутентификации форм слайд 1/2 • Интерфейс Membership API основан на аутентификации с помощью форм и предла гается в виде готовой к применению инфраструктуры для управления и аутентифика ции пользователей. Таким образом, в качестве первого шага приложение должно быть сконфигурировано на аутентификацию с помощью форм. Но на этот раз структура ре шения будет немного отличаться. Часто к корневому каталогу приложения открывается доступ для анонимных пользователей, в то время как ограниченные ресурсы сохраня ются в подкаталогах с ограниченным доступом. Эти подкаталоги имеют собственные файлы web. config, которые закрывают доступ анонимным пользователям. Как только кто-то пытается обратиться к ресурсам, расположенным в защищенном каталоге, ис полняющая среда ASP. NET автоматически перенаправляет пользователя на страницу входа.
Конфигурирование аутентификации форм слайд 2/2 • Таким образом, в корневом каталоге веб-приложе ния нужно только сконфигурировать аутентификацию с помощью форм, включив следующий фрагмент: • Эта конфигурация указывает на приме нение аутентификации с помощью форм и открывает анонимный доступ к страницам. В защищенный под каталог должен быть помещен дополнительный файл web. config со следующим содержимым:
Создание хранилища данных • С помощью Membership API необходимо настроить хранилище данных, с которым будет работать поставщик членства. При использова нии SQL Server Express Edition в сочетании с ASP. NET класс Sql. Membership. Provider способен создать это хранилище автоматически. Однако в случае применения любой другой версии SQL Server это хранилище должно создаваться вручную. Есть и ряд дру гих причин для того, чтобы не использовать автоматически присоединяемую, основан ную на файлах базу данных. Этими причинами являются производительность и парал лелизм. • Поэтому для рабочих сред рекомендуется ручное создание базы данных членства. В случае Sql. Membership. Provider создание такого хранилища данных означает создание базы данных SQL Server и множества таблиц и хранимых процедур в ней. ASP. NET поставляется с множеством сценариев SQL , которые позволяют вручную создать необходимую базу данных и ее таблицы, необходимые для хранения информации о пользователях и ролях, используемой Membership API. Однако ASP. NET также поставляется с инструментом aspnet _ regsql. exe , который создает таблицы автоматически. В случае специального поставщика потребуется подготовить и настроить источник данных, применяемый этим поставщиком, в соответствии с его документацией. • Инструмент aspnet _ regsql. ехе можно использовать двумя способами: либо через интерфейс мастера, либо из командной строки, указывая специальные переключатели командной строки. В любом случае понадобится запустить инструмент в окне команд ной строки Visual Studio , поскольку оно включает всю необходимую настройку путей к каталогу. NET Framework , содержащему нужные инструменты. Если просто запусти ть его без параметров, то на экране появится интерфейс мастера, который проведет по всему процессу создания базы данных
Сценарии БД 225 Сценарий Описание Install. Common. sql Устанавливает некоторые общие таблицы и хранимые проце дуры, необходимые и для Membership. API , и для Roles API. Это включает таблицы для идентификации приложений ASP. NET , которые используют другие средства ASP. NET , такие как Membership API , службу ролей, а также персонализацию Install. Membership. sql Устанавливает таблицы базы данных, хранимые процедуры и триггеры, используемые Membership API. Сюда входят табли цы пользователей, дополнительные свойства пользователей и хранимые процедуры для доступа к этой информации Install. Roles. sql Устанавливает таблицы базы данных и хранимые процедуры, необходимые для ассоциирования пользователей с ролями приложений. Эти роли затем используются для авторизации Install. Personalization. sql Содержит команды DDL для создания любой таблицы и хра нимой процедуры, необходимой для создания персонали зированных портальных приложений с помощью Web Parts. Install. Profile. sql Создает все необходимые таблицы и хранимые процедуры для поддержки пользовательских профилей ASP. NET Install. Sql. State. sql Устанавливает таблицы для постоянных состояний сеансов в базе данных TEMP на сервере SQL Server. Это значит, что каж дый раз, когда служба SQL Server останавливается, состояние сеанса теряется Install. Persist. Sql. State. sql Устанавливает таблицы для постоянных состояний сеансов в от дельной базе данных ASPState. Это значит, что состояние се ансов сохраняется даже после перезапуска службы SQL Server
Конфигурирование соединения и поставщика членства • В случае применения хранилища SQL Server (или другого хранилища на основе базы данных) первым делом должна быть настроена строка соединения. Это можно сделать в разделе файла web. config. : • После настройки строки соединения с хранилищем данных о членстве понадобится сконфигурировать поставщик членства для приложения. Для этого необходимо доба вить в файл web. config раздел (если его еще там нет) непосредствен но внутри раздела , как показано ниже (опять-таки, в корневом файле web . config , как описано в начале этого раздела — эмпирическое правило заключается в том, что эти конфигурации поставщика помещаются в web. config , поскольку затра гивают все веб-приложение). • Внутри раздела можно добавить множество поставщиков как до черние элементы раздела . В предыдущем коде показана допустимая конфигурация для поставщика Sql. Membership. Provider. Важно не забыть об атри буте default. Provide г. Этот атрибут указывает поставщика членства, который будет использоваться в коде.
Свойства Sql. Membership. Provider слайд 1/ 3 227 Свойство Описание Name Указывает имя поставщика членства. Можно выбрать любое имя по своему желанию. Имя может быть ис пользовано позже для ссылки на поставщика, когда производится программное обращение к списку скон фигурированных поставщиков членства. application. Name Строковое значение, указывающее имя приложения, для которого поставщик членства управляет пользо вателями и их настройками. Это свойство позволяет использовать одну базу данных членства для множе ства приложений. description Необязательное описание поставщика членства password. Format Получает или устанавливает формат, в котором будут сохраняться пароли в хранилище удостоверений. Допустимые варианты: Clear — для хранения па ролей в виде простого текста, Encrypted — для шифрования паролей в хранилище (для шифрования применяется локально настроенный ключ машины) и Hash — для хеширования паролей в хранилище ин формации о членстве min. Required. Non. Alphanumeric. Characters Указывает количество не алфавитно-цифровых сим волов, которые должен иметь пароль. min. Required. Password. Length Позволяет задать минимальную длину паролей для пользователей приложения. Это также важное свой ство, определяющее надежность пароля
Свойства Sql. Membership. Provider слайд 2 / 3 228 password. Strength. Regular. Expression Если перечисленных выше свойств не достаточно для определения требований к надежности пароля, мож но использовать регулярное выражение для указания формата допустимых паролей. Благодаря этой опции, можно гибко определять критерии формата паролей enable. Password. Reset Платформа Membership API имеет функциональность для переустановки пользовательских паролей и не обязательной отправки электронной почты, если для приложения сконфигурирован SMTP -сервер enable. Password. Retrieval Когда установлено в true, можно извлекать пароль из объекта Membership. User, вызывая его метод Get. Password. Работает только то гда, когда пароль не хеширован max. Invalid. Password. Attempts Задает количество неудачных попыток входа, прежде чем пользователь будет заблокирован. Значение по умолчанию равно 5. password. Attempt. Window Задает количество минут, в течение которых могут предприниматься попытки ввода неправильных паро лей или длиться диалог из вопросов-ответов, связан ных с забытыми паролями, прежде чем пользователю будет полностью заблокирован доступ к приложению, так что только администратор сможет вновь активи зировать учетную запись. Значение по умолчанию составляет 10 минут.
Свойства Sql. Membership. Provider слайд 3 / 3 229 requires. Question. And. Answer Указывает, нужно ли в данном приложении использо вать вопрос и ответ для восстановления забытого па роля. При правильном ответе на вопрос пользователь имеет возможность получить новый автоматически сгенерированный пароль по электронной почте requires. Unique. Email Указывает, должны ли адреса электронной почты быть уникальными для каждого пользователя в лежащем в основе хранилище данных о членстве
Создание аутентифицируемых пользователей
Аутентификация с помощью Membership API protected void Login. Action_Click(object sender, Event. Args e) { if (Membership. Validate. User(Username. Text, Password. Text)) { Forms. Authentication. Redirect. From. Login. Page(Username. Text, false); } else { // Неверное имя пользователя или пароль. Legend. Status. Text = «Invalid user name or password»; } }
Использование элементов управления безопасностью • Теперь, когда подготовлены поставщик и хранилище для информации о пользова телях, можно приступать к построению пользовательского интерфейса для аутентифи кации, входа пользователей и предоставлении им возможности переустановки паролей. Все это потребует создания ряда страниц ASP. NET (таких как login. aspx , которая не обходима для рассмотренной выше аутентификации с помощью форм). • Платформа ASP. NET поставляется с множеством элементов управления, которые упрощают построение, например, страниц входа, а также связанных с ними страниц (например, для первоначальной регистрации пользователей, переустановки паролей с использованием комбинаций вопросов и ответов и т. д. ).
Элементы управления безопасностью слайд 1/2 Элемент управления Описание Login Составной элемент управления, который решает наиболее общую задачу в приложениях, основанных на аутентификации с помощью форм — ото бражает текстовые поля для ввода имени пользователя и пароля, а также кнопку входа. Вдобавок, если события обрабатываются посредством специальных процедур событий, он автоматически проверяет пользова теля через поставщик членства по умолчанию. Этот элемент обычно по мещается на странице login. aspx, используемой для аутентификации с помощью форм. Тем не менее, его можно разместить на любой страни це, где нужно разрешить пользователям входить на веб-сайт Login. Status Простой элемент управления, проверяющий состояние аутентификации текущего сеанса. Если пользователь не аутентифицирован, он предлагает кнопку входа для перенаправления на сконфигурированную страницу вхо да. В противном случае отображает кнопку выхода, обеспечивая возмож ность выхода из приложения. Этот элемент инкапсулирует поведение, ко торое обычно должно быть доступно на всех страницах. Поэтому его очень удобно размещать на мастер-странице. Тем не менее, его можно исполь зовать на любой странице, где должно отображаться состояние входа с прямыми ссылками на страницу входа или выхода пользователей
Элементы управления безопасностью слайд 2/2 Login. View Действительно мощный элемент управления, который дает возможность отображать разные наборы элементов управления для аутентифицирован ных и неаутентифицированных пользователей. Кроме того, он позволяет отображать разные элементы управления для пользователей с отличающимися ролями. Этот элемент обычно помещает ся на страницу с содержимым, поскольку отображает содержимое веб-сай та в зависимости от параллельно работающих со страницей пользователей Password. Recovery Позволяет пользователю извлечь пароль, если при регистрации был указан его адрес электронной почты. Запрашивает имя пользователя, затем автоматически отображает интерфейс с контрольным вопросом и ожидает ответа. Если ответ правильный, использует Membership API для отправки пароля пользователю. Change. Password Составной элемент управления, который запрашивает старый пароль пользователя и позволяет ему ввести и подтвердить новый пароль. Опять-таки, этот элемент управления обычно размещается на отдельной странице ASP. NET , предназначенной для смены пароля пользователем Create. User. Wizard Включает полный мастер, который проводит пользователя (или админи стратора) через процесс создания нового пользователя. Этот элемент обычно помещается на отдельную страницу ASP NET веб-сайта, которая позволяет пользователю самостоятельно регистрироваться на веб-сайте
Элемент управления Login
Локализация проектов. Ресурсы проекта • Создание многоязычных web-сайтов имеет особенно большое значение в неанглоговорящих странах. Изначально ASP. NET настроена на английский язык, причем на его американскую разновидность. Но платформа. NET поддерживает концепцию информации о культуре, а строки хранятся в формате Unicode, что позволяет писать их на множестве языков. Глобализация — это создание приложений, способных работать в разных культурных средах. Локализация — создание ресурсов для работы с конкретной культурой. Ресурсы должны быть отделены от программного кода. • Классы для работы с информацией о культурах заключены в пространстве имен Globalization. Класс Culture. Info содержит свойство Current. Culture, которое позволяет узнать все данные о текущей культуре — форматы отображения, календарь, кодовую страницу и другие. • Файлы ресурса содержат строки, которые могут быть написаны на разных языках для различных культурных сред. Формат этих файлов — XML, следующий специальной схеме Microsoft Res. X. Файлы. resx автоматически включаются в сборку для использования на страницах. Кроме строк, файлы ресурса могут содержать картинки и другие файлы. Их можно использовать для создания многоязычных приложений.
Папки ресурсов • В папке App_Global. Resources хранятся файлы ресурсов , названия которых соответствуют культурной схеме. Например, ресурс для русской культуры называется Resource. ru-ru. resx, для немецкой — Resource. de — DE. resx. Ресурс с нейтральной культурой называется просто Resource. resx. Ресурсы доступны для всех страниц и пользовательских элементов управления. Промежуточное расширение следует стандарту. NET на региональные стандарты — состоит из главного и вспомогательного тегов. • В папке \App_Local. Resources хранятся локальные файлы ресурсов для конкретных страниц. Название файла ресурса формируется из имени страницы, кода культурной среды и расширения resx. Например, default. aspx. fi. resx — это файл ресурса на финском языке для страницы default. aspx. • Протокол HTTP позволяет браузерам посылать список предпочитаемых языков на сервер. В браузере можно настроить предпочтительные языки web-страниц. ASP. NET позволяет автоматически модифицировать культуру страницы в зависимости от первого языка в списке. Для этого атрибуту Culture директивы Page нужно присвоить значение auto. Так же обстоит дело у атрибута UICulture — он определяет культуру пользовательского интерфейса. Менеджер ресурсов ищет строки и другие ресурсы в файле с тем расширением, которое определено в атрибуте UICulture. Формат отображения дат, чисел и денежной информации определяется атрибутом Culture. •
Пример глобализации • Загрузить строку из файла ресурсов можно по-разному. Первый способ — использовать класс Resource. Предварительно в App_Global Resources нужно создать файлы Resource. resx и Resource. ru-RU. resx со строками. Name Value Answer Good morning, Page. Title Sample Globalization Page Question What is your name? Name Value Answer Привет Page. Title Пример глобализации ASP. NET Question Как Вас зовут?
Пример глобализации 2
public partial class Web. Form 3 : System. Web. UI. Page { protected void Page_Load(object sender, Event. Args e) { Page. Title = Resources. Resource. Page. Title; } protected void Button 1_Click(object sender, System. Event. Args e) { Localize 1. Text = Resources. Resource. Answer + «, » + Textbox 1. Text; } }
Глобализация • Второй способ позволяет статически выводить информацию из локальных файлов ресурсов: • •
Web – службы ( web- сервисы) • В процессе эволюции Интернета появилась необходимость в создании распределенных приложений. Приложения, установленные на компьютере, обычно используют библиотеки, размещенные на нем. Одну библиотеку могут использовать несколько программ. • Предприятия на своих страницах предоставляют разнообразную информацию. Например, со своего сайта компания «Форд» публикует информацию о моделях и ценах. Дилер этой компании хотел бы иметь эту информацию и на своем сайте. Web-служба позволяет сайту-потребителю получать информацию с сайта-поставщика. Сайт-потребитель показывает эту информацию на своих страницах. Код для генерации этой информации написан один раз, но может использоваться многими потребителями. Данные представлены в простом текстовом виде, поэтому ими можно пользоваться независимо от платформы.
Web — сервисы • Web-сервисы широко используются и в Desktop, и в Интернет-приложениях. Они сами по себе являются не приложениями, а источниками данных для приложений. У них отсутствует пользовательский интерфейс. Web-сервисами необязательно пользоваться через сеть — они могут быть частью проекта, в котором используются. • Web-сервисы — это функциональность и данные, предоставляемые для использования внешними приложениями, которые работают с сервисами посредством стандартных протоколов и форматов данных. Web-сервисы полностью независимы от языка и платформы реализации. Технология Web-сервисов является краеугольным камнем программной модели Microsoft. NET.
SOAP • Для взаимодействия с web-сервисами применяется протокол SOAP , основанный на XML. Можно было бы использовать просто XML, но это слишком свободный формат, в нем каждый документ фактически создает свой язык. SOAP — это соглашение о формате XML-документа, о наличии в нем определенных элементов и пространств имен. • SOAP позволяет публиковать и потреблять сложные структуры данных, например Data. Set. В то же самое время его легко изучить. Текущая версия SOAP — 1. 2. • SOAP — это Простой Протокол Обмена Данными (Simple Object Access Protocol). SOAP создан для того, чтобы облегчать взаимодействие приложениям через HTTP. Это особый независимый от платформы формат обмена сообщениями через Интернет. Сообщение SOAP — это обычный XML-документ. Стандарт SOAP разрабатывает консорциум W 3 C. • SOAP -сообщение состоит из конверта (envelope), заголовка (header) и тела (body). Элементы body и envelope должны присутствовать всегда, а header необязателен. Элемент envelope — корневой. Элемент header может содержать специфичную для данного приложения информацию. В документе, сгенерированном web-сервисом, может присутствовать элемент ault, который описывает ошибку работы. POST /Web. Site 5/Web. Service. asmx HTTP/1. 1 Host: localhost. Content-Type: application/soap+xml; charset=utf-8 Content-Length: length
Использование Web- службы • Сайт http: //www. webservicelist. com/ — каталог различных сервисов. • Чтобы получить информацию от web-службы , нужно только послать HTTP-запрос, в теле которого находится SOAP -сообщение.
Пример запроса – погода в Москве Запрос к службе http: //www. webservicex. net/globalweather. asmx на получение прогноза погоды в Москве выглядит так: POST /globalweather. asmx HTTP/1. 1 Host: www. webservicex. net Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: «http: //www. webservice. X. NET/Get. Weather» Moscow Russian
Ответ сервиса Moscow / Vnukovo , Russia (UUWW) 55 -39 N 037 -16 E Aug 07, 2006 — 04: 30 AM EDT / 2006. 08. 07 0830 UTC from the E (080 degrees) at 11 MPH (10 KT): 0 greater than 7 mile(s): 0 overcast 66 F (19 C) 55 F (13 C) 68% 29. 85 in. Hg (1011 h. Pa) Sccess
Добавление в проект ссылки на Web- сервис
Код для работы с Web — сервисом protected void Button 1_Click(object sender, System. Event. Args e) { Web. Application 3. net. webservicex. www. Global. Weather w 1= new Global. Weather(); string xmlstring = w 1. Get. Weather(«Moscow», «Russia»); Xml. Docment doc = new Xml. Document(); // загрузка ответа в документ doc. Load. Xml(xmlstring); // doc. Child. Nodes. Item(0) — это XML- заголовок // doc. Child. Nodes. Item(1) — тело Xml. Node child = doc. Child. Nodes. Item(1); Xml. Element el = child[«Temperature»]; Textbox 1. Text += el. Inner. Text; }
Создание Web- службы
Работа с XML • Аббревиатура XML расшифровывается как Extensible Markup Language, в переводе «расширяемый язык разметки». Как и язык HTML, он является подмножеством SGML (Standard General Markup Language). • XML — это универсальный, независящий от платформы стандарт описания информации, который можно использовать для представления иерархических данных и унификации передаваемой информации. Без его знания невозможно понимание SOAP и, следовательно, web-сервисов. XML стал де-факто стандартом передачи данных в сети Интернет. Стандарт XML и связанных с ним форматов определяется консорциумом W 3 C (World Wide Web Consortium). • XML создан для описания данных и фокусируется на том, что именно они из себя представляют. HTML создан для демонстрации данных и фокусируется на том, как данные выглядят. Теги XML не предопределены создателями языка, в отличие от тегов HTML. Каждый автор документа сам определяет собственные теги. • Стандарт требует, чтобы программа, которая обрабатывает XML-документ, остановливала работу, когда обнаружит ошибку. А если браузер обнаружит непонятный тег в HTML или отсутствие закрывающего тега, он это просто игнорирует.
• В начале XML-документа обязательно появляется его декларация, или пролог. В нем указывается версия стандарта XML , которому он соответствует: • • Декларация не является частью XML-документа и не имеет закрывающего тега. В тексте XML-файла могут находиться комментарии в стиле HTML — . • XML-документ может иметь только один корневой элемент. В него могут быть вложены другие узлы, а в них, в свою очередь, — другие. Каждому открывающему тегу XML должен соответствовать закрывающий тег. После завершающего тега корневого элемента не может быть других тегов. Теги XML чувствительны к регистру (case-sensitive). Теги должны быть целиком вложены друг в друга. поэтому код, допустимый в HTML • Какой-то текст является ошибкой в XML. • У тегов могут быть атрибуты. Значения атрибутов должны быть заключены в кавычки. Порядок атрибутов значения не имеет. Между открывающим и закрывающим тегами может находиться текст. В XML сохраняются все пробелы, находящиеся в тексте. Если текста нет, можно применить сокращенную форму записи. Пример тега XML : • • Это краткая форма тега • • Существует атрибут xmlns, который определяет пространство имен. Значением его может быть любое уникальное имя. Существует договоренность использовать URL, так как они уникальны. Пространства имен имеют смысл, аналогичный их применению в. NET Framework — чтобы не смешивать одинаковые имена, используемые разными разработчиками. Название пространства имен отделяется от имени двоеточием. • XML-файлы представляют иерархическую информацию, которую можно представить в виде дерева с одним корнем. • Документы XML , удовлетворяющие всем требованиям синтаксиса, называют правильными (well-formed). Для описания данных XML использует DTD (Document Type Definition) — определение типа документа. Если файл соответствует DTD, он считается действительным (valid).
Ad. Rotator • Элемент управления Ad. Rotator позволяет показывать рекламные баннеры и автоматически заменять их на другие. Сами баннеры описаны в файле XML или в другом источнике данных. Реклама обновляется каждый раз при обновлении страницы. В свойстве Advertisment. File задается имя XML-файла. • Скелет XML- файла таков : • • • • Внутри узла Advertisements располагаются узлы • • У этих узлов имеются 5 атрибутов, все они необязательны. Image. Url Картинка, которая будет демонстрироваться при выборе данного объявления Navigate. Url Адрес, по которому будет совершен переход при щелчке на картинку Alternate. Text Альтернативный текст, если показ изображений выключен Impressions Все значения Impressions суммируются. Вероятность показа рекламы равна значению Impressions, деленному на эту сумму Keyword Ключевое слово-категория рекламы, позволяет фильтровать объявления
fixed. gif http: //www. im. am Бесплатный хостинг 40 хостинг logo 2. jpg http: //www. nv. am Газета » Новое время » 50 новости summer. jpg http: //www. utro. ru Певицу Жасмин избил муж ! 100 желтые новости
• • Если установлено свойство Keyword, то элемент управления показывает только ту рекламу, которая соответствует его содержанию. • В предыдущих версиях ASP. NET можно было работать только с файлами XML. Теперь можно использовать любой источник данных, связавшись с источником данных. В таком случае необходимо указать как минимум 3 поля источника в свойствах Image. Url. Field, Navigate. Url. Field и Alternate. Text. Field: •
Файлы определения схемы документа • Согласно современному стандарту, валидный документ должен соответствовать связанному с ним файлу XSD (XML Schema Definition) — файлу определения схемы XML , который определяет конкретный язык, то есть описывает, какие элементы и типы могут появляться в документе. Схемы XSD призваны заменить DTD (Document Type Definition), разница между ними заключается в том, что файлы XSD сами тоже используют синтаксис XML. Схемы XSD позволяют определить, какие теги разрешены, обязательны они или нет, могут ли повторяться в документе и так далее. Таким образом, XML описывает данные, а XSD — структуру этих данных, или метаданные. В терминах программирования, XSD — описание типов, в то время как в XML-файле описаны объекты этих типов. • http: //www. w 3. org/standards/techs/xmlschema#w 3 c_all
• Файл описания схемы начинается с описания префикса пространства имен, который включается затем во все элементы этого файла. Адрес http: //tempuri. org предназначается для задания URI для пространств имен ASP. NET: • • •
Декларирование элементов и атрибутов • • Например, это определение задает, что элемент «Author» строкового типа, должен появляться один и только один и раз, и если он не указан, то принимает значение «Пушкин». • • Параметр max. Occurs=»unbounded» указывает, что элемент может встречаться любое количество раз. • Параметр ref позволяет ссылаться на уже описанный в данном файле глобальный элемент или атрибут, чтобы избежать повторного описания одних и тех же элементов
Определение сложных типов • В XSD есть предопределенные типы — примерно такие же, как в. NET. Во время работы приложения они преобразуются в типы. NET. На их основании можно строить сложные типы, похожие на структуры языков программирования. Сложный тип состоит из последовательности описаний элементов. Определим сложный тип: • Тег определяет, что элементы в данном типе должны появляться в заданном порядке. Если бы использовался тег , то порядок появления элементов мог бы быть любым. • Тег похож на структуру с вариантами. Он определяет, что в элементе данного типа должен быть только один из вложенных элементов:
Определение простых типов • Простые типы тоже строятся на основе стандартных типов, накладывая разные ограничения. Типы могут быть глобальными или вложенными в определение элементов. • Глобальный тип можно использовать в определении элементов: • • В следующем примере определен простой тип, вложенный в определение элемента My. Value: • Значениями этого типа могут быть целые положительные числа от 1 до 10. • Простой тип может быть перечислением:
Добавление новых атрибутов и групп атрибутов, аннотаций • • Аннотации позволяют вставлять описание существующих элементов — таким образом, в файл добавляется документация: • • • Цитаты разных авторов • • предназначается для читателей файла, а — для обрабатывающих файл программ.
XMLReader • С помощью класса Xml. Reader можно быстрее, чем другими методами, получить данные из XML-документов. • Xml. Reader обеспечивает последовательный доступ только для чтения к потоку XML-данных. Класс Xml. Reader согласуется с рекомендациями консорциума W 3 C по языку XML 1. 0 и по пространствам имен в XML. • Текущий узел ссылается на узел, в котором расположено средство чтения. Средство чтения продвигается с помощью любого из методов чтения, свойства соответствуют значению текущего узла.
• Xml. Reader — это абстрактный класс. Чтобы начать чтение, в статический метод Create передается объект класса Xml. Reader. Settings. Эта функция подсчитывает число узлов в документе: using System. Xml; using System. IO; private int Count. Nodes(string xml. File) { int Nodes. Count=0; Xml. Reader. Settings settings = new Xml. Reader. Settings(); settings. Ignore. Whitespace = true; settings. Ignore. Comments = true; using (Xml. Reader reader = Xml. Reader. Create(xml. File, settings)) { while (reader. Read()) { if (reader. Node. Type == Xml. Node. Type. Element) { Nodes. Count++; } } return Nodes. Count; }
XPath. Docment • Класс обеспечивает чтение и хранение в памяти XML-документов для трансформаций с помощью XSL. По документу можно перемещаться в любом направлении и получать произвольный доступ к любому элементу, используя выражения XPath. • Возьмем XML-документ «Quotes. xml» и файл трансформации XSL «Quotes. xsl». В выходной поток страницы будет направлен результат преобразования XML -документа:
Элемент управления XML • Элемент управления XML предоставляет способ преобразовать XML-документ, используя таблицу стилей XSL. Свойство Docment. Source позволяют задать XML-файл, в котором находятся данные, а Transform. Source — файл трансформации XSLT. • В предыдущем примере того же результата можно достичь, если поставить на странице элемент управления XML : • •
XMLData. Source • Элемент-источник данных XMLData. Source обеспечивает простой способ подключения XML-документов как источников данных к элементам, отображающим информацию. Также можно задать запрос XPath для того, чтобы отфильтровать данные. Как и Sql. Data. Source, он позволяет редактировать, удалять, добавлять записи данных. Для этого нужно получить доступ к находящемуся в нем объекту Xml. Data. Document с помощью вызова метода Get. Xml. Document. После редактирования документ сохраняется с помощью метода Save. • В отличие от табличных данных в СУБД, данные в XML-файлах иерархичны, поэтому XMLData. Source удобно привязывать к иерархичным элементам управления, например, Menu.
Элемент управления File. Upload • Формы HTML позволяют загружать пользовательские файлы на сервер. Для этого нужно установить атрибут enctype как «multipart/form-data» и в нем должен находиться элемент • . • Элемент управления File. Upload облегчает эту работу. Нужно вставить его в форму, а enctype установится автоматически. Элемент состоит из строки ввода и кнопки с надписью Browse. • Процесс загрузки начинается после подачи формы на сервер, обычно для этого вставляют еще одну кнопку:
• После того как файл загружен, File. Upload позволяет узнать его свойства. Файл находится в кэше сервера, пока не будет сохранен на диск методом Save. As: protected void Upload. Button_Click(object sender, Event. Args e) { if (this. File. Upload 1. Has. File) { try { File. Upload 1. Save. As(«c: \\Uploads\\» + File. Upload 1. File. Name); Message. Text = » Имя файла : » + File. Upload 1. Posted. File. Name + » » + File. Upload 1. Posted. File. Content. Length + » кб » + «Content type: » + File. Upload 1. Posted. File. Content. Type; } catch (Exception ex) { Message. Text = » Ошибка : » + ex. Message. To. String(); } } Процесс сохранения может вызвать исключения, поэтому он заключен в блок try-catch.
Использование Java. Script • Страница, отображающая время на стороне клиента:
protected void Page_Load(object sender, Event. Args e) { string my. Script = @»function Show() { document. forms[0][‘Client. Time’]. value=Date(); }»; if (!Page. Client. Script. Is. Client. Script. Block. Registered(«My. Script»)) Page. Client. Script. Register. Client. Script. Block(this. Get. Type(), «My. Script», my. Script, true); }
Register. Startup. Script • Метод Register. Startup. Script похож на предыдущий, и отличие заключается в том, что скрипт выполняется при загрузке страницы, но после отображения всех элементов. Сам скрипт находится в конце описания формы. Парсер Java. Script не может обратиться к элементам, если они не описаны до функции. Если написать скрипт, которые читает данные из формы, то попытка отображения страницы вызовет ошибку времени выполнения: string my. Script 1 = @»alert(document. forms[0][‘Client. Time’]. value); «; Page. Client. Script. Register. Client. Script. Block(this. Get. Type(), «Alert. Script», my. Script 1, true); • Значение поля в момент отображения скрипта еще не определено. Поэтому нужно вызывать Register. Startup. Script: string my. Script 1 = @»function Message() {alert(document. forms[0] [‘Client. Time’]. value); }»; Page. Client. Script. Register. Startup. Script(this. Get. Type(), «Alert. Script», my. Script 1, true);
Register. Client. Script. Include • Метод Register. Client. Script. Include позволяет подключить внешний файл Java. Script. Например , Page. Client. Script. Register. Client. Script. Include(«m y. Key», «Extern. Java. Script. Code. js»); • создает на выданной странице код
Использование клиентских событий В примерах использовались не серверные командные кнопки, а элементы управления HTML. Причина заключается в том, что нажатие на командную кнопку отправляет форму на сервер. Событие On. Click выполняется на сервере. А в Java. Script существует свой On. Click. Вызвать его можно при помощи свойства Attributes, которое позволяет обратиться к атрибутам элемента, даже тем, которые не соответствуют встроенным свойствам: protected void Page_Load(object sender, Event. Args e) { Button 2. Attributes. Add(«onclick», «Show(); return false»); } return false нужно писать обязательно, иначе форма будет отправлена на сервер. Эти функции можно применить к любым серверным элементам: public static void Add. Confirm. Message(Web. Control ctl, string message) { ctl. Attributes. Add(«onclick», «if ( ! confirm( ‘» + message + «‘ )) return false; «); } public static void Add. Popup. Message(Web. Control ctl, string message) { ctl. Attributes. Add(«onclick», «alert( ‘» + message + «‘); «); }
Работа с данными • Для того чтобы создавать интересные web-страницы, необходимо наполнить их динамичным, обновляемым содержанием. Особенно необходимо это в бизнес-приложениях — банковских, интернет-магазинах и аукционах. Важная часть работы, которую выполняет разработчик ASP. NET — это связывание своих страниц с источниками данных, отображение данных на странице, создание удобных средств взаимодействия с ними. • Для хранения данных чаще всего используются СУБД (системы управления базами данных). В ASP. NET работа с данными происходит через ADO. NET — часть. NET, разработанная специально для доступа к базам данных или XML-файлам.
ADO. NET • ADO. NET — это набор классов для работы с внешними данными. • Соединение в ADO. NET может происходить с помощью различных провайдеров. • Классы ADO. NET объединены в несколько пространств имен. • System. Data — это ядро ADO. NET. Оно содержит классы, необходимые для связи посредством любых провайдеров данных. Эти классы представляют таблицы , строки, столбцы, Data. Set (множество взаимосвязанных таблиц ). Там определены интерфейсы (в смысле языка C#) соединений с базами данных, команд, адаптеров данных. • System. Data. Common — базовые классы для всех провайдеров данных — Db. Connection, Db. Command, Db. Data. Adapter. • В System. Data. Ole. Db находятся классы, позволяющие работать с источниками данных Ole. Db, в том числе с MS SQL версии 6. 0 и ниже. Там находятся такие классы, как Ole. Db. Connection, Ole. Db. Data. Adapter и Ole. Db. Command. • System. Data. Odbc содержит классы, которые работают с источниками данных ODBC посредством провайдера. NET ODBC. Классы имеют аналогичные имена с префиксом Odbc. • System. Data. Sql. Client. Здесь определен провайдер данных для СУБД SQL Server версии 7. 0 и выше. Содержатся классы Sql. Connection, Sql. Transaction, Sql. Command и другие. • В System. Data. Sql. Types находятся классы, представляющие типы данных СУБД SQL Server. • Классы ADO. NET делятся на 3 типа. Классы типа Disconnected определяют базовую структуру данных, например, Data. Table. Они независимы от каких-либо провайдеров данных и могут создаваться и заселяться данными непосредственно в программе. Классы Shared — базовые и общие для всех провайдеров. Классы Data Provider — специфические для разных провайдеров.
Использование ADO. NET • Программирование ADO. NET • Все провайдеры данных содержат классы соединений, адаптеров, команд. Схема типичной программы в ADO. NET следующая: • 1. Вначале создается соединение с базой данных — класс Connection , который обеспечивается необходимой информацией — строкой соединения. • 2. Создается объект Command и задается команда, которую необходимо выполнить в данной СУБД. Эта команда может быть запросом SQL или исполняемой процедурой. Нужно задать параметры этой команды, если они имеются. • 3. Если команда не возвращает данных, она просто выполняется с помощью одного из методов Execute. Например, это может быть удаление или обновление данных таблицы. • 4. Если команда возвращает выборку данных, их необходимо куда-то поместить. Решите, нужно ли вам получить данные для последующего использования без связи с базой данных или же нужно просто быстро выполнить команду. В первом случае нужно создать класс Data. Adapter и с его помощью сохранить данные в Data. Set или в Data. Table. Во втором случае создается класс Data. Reader, который требует сохранять соединение на все время работы, хранит выборку только для чтения и позволяет двигаться только вперед. Зато чтение с помощью Data. Reader выполняется в несколько раз быстрее, чем в Data. Adapter. • 5. Задать полученный Data. Set или Data. Reader как источник данных элемента управления или вывести их на страницу другим способом.
Элементы – источники данных • Эти элементы облегчают работу с ADO. NET, инкапсулируя работу с соединениями, командами и адаптерами. Они реализуют интерфейс IData. Source, в котором определен базовый набор возможностей работы с источниками данных. Большинство этих классов предоставляют функциональность для чтения и записи. Они являются обертками объектов ADO. NET. В предыдущих версиях надо было создавать объекты ADO самим и связывать элементы-управления с ними посредством команды Data. Bind. Теперь элементы управления связываются c элементом-источником посредством свойства Data. Source. ID. Любой класс-источник данных может быть связан почти с любым классом для отображения данных, и это предоставляет большую гибкость. • Всего в ASP. NET 5 элементов-источников данных : Sql. Data. Source , Access. Data. Source и Object. Data. Source для работы с табличными источниками данных и Xml. Data. Source и Site. Map. Data. Source — для работы с иерархическими данными. • Sql. Data. Source позволяет соединяться с большинством реляционных СУБД. Sql в названии класса означает, что служит для соединения с базами, которые понимают язык запросов Sql, а не только с MS SQL Server. • Access. Data. Source оптимизирован для работы с базами Access. Например : • Site. Map. Data. Source — это специализация Xml. Data. Source, работает с файлами навигации по сайту и служит источником данных для элементов управления навигации. • Object. Data. Source нужен для соединения с написанными программистом бизнес-объектами. • Элементы-источники данных предназначены для двустороннего обмена данными, то есть как для чтения, так и для записи. Сами по себе они ничего не отображают. Данные будут доступны подключенным к ним элементам управления.
Кэширование и сортировка • Кэширование нужно для увеличения эффективности работы с данными. При включенном кэшировании Sql. Data. Source «запоминает» большое количество записей на заданное время, даже если все данные не отображаются сразу, но могут понадобиться при перелистывании. Например, студент читает первую страницу лекции, логично, что он вскоре перейдет ко второй. Если сервер хранит в оперативной памяти все страницы лекции, он их оперативно выдаст, не обращаясь к базе. • При включенном кэшировании данные читаются «большим куском», а выборка записей происходит с помощью фильтрования. • В Sql. Data. Source кэширование и сортировка возможны только при получении данных через Data. Set. Если Data. Source. Mode равно Data. Reader, а Enable. Caching — True, будет выброшено исключение Non. Supported. Exception. • Длительность кэширования можно задать в свойстве Cache. Duration, это может быть определенное количество секунд или Infinite, то есть данные никогда не обновляются. • Поведение кэширования зависит от сочетания свойств Cache. Duration и Cache. Expiration. Policy. Если значение Cache. Expiration Policy равно Absolute, то элемент запрашивает информацию через промежутки времени, определенные в Cache. Duration, а старую стирает из памяти. Если Cache. Expiration. Policy равен значению Sliding, то Sql. Data. Source начинает отсчет времени после каждого запроса к нему. Данные из кэша устаревают, если в течение времени Cache. Duration не было ни одного Select-запроса. • В Filter. Expression задается выражение для фильтрации, причем формат этих выражений аналогичен тому, что используется для форматирования строк с параметрами в фигурных скобках {0}, {1}, в которые подставляются значения из источника, указанного в Filter Parameters. • В свойстве Sort. Parameter. Name можно записать список полей, по которым проводится сортировка, возможно с добавлением опции Desc для сортировки в порядке убывания. Параметры передаются в команду Select, если это серверная процедура.
Object. Data. Source • Как уже было сказано, этот класс работает с бизнес-объектами. Это такие классы, которые инкапсулируют логику работы с данными, нужными в приложении. Класс бизнес-объекта может быть написан на любом языке. NET. Как и все классы, он располагается в папке App_Code. • Object. Data. Source работает как связующее звено между бизнес-объектами и элементами управления, отображающими данные. Получается многоуровневая компонентная архитектура. Классы бизнес-объектов могут поменять свое внутреннее представление, и это никак не отразится на страницах, которые их используют. Object. Data. Source работает во многом так же, как Sql. Data. Source , с той разницей, что он имеет дело не с базой данных, а с классом. • Свойство Type. Name класса Object. Data. Source указывает на используемый класс. Класс бизнес-объекта должен поддерживать конструктор и 4 метода (возможно, и больше) — для чтения, редактирования, удаления и добавления данных в источник данных. Элемент управления Object. Data. Source пользуется этими методами. • Например, свойство Select. Method указывает на метод класса бизнес-объекта , который возвращает данные. • Откуда бизнес-объект берет данные, ему не важно. Некоторые бизнес-объекты работают с базами данных, некоторые — с сессией или текстовыми файлами. Главное, что метод, который он использует для чтения, должен возвращать класс, реализующий интерфейс IEnumerable. Update. Method — метод, который обновляет данные. Аналогичную функцию выполняют Delete. Method и Insert. Method. • Класс бизнес-объекта может поддерживать метод Select. Count, который возвращает общее количество объектов в источнике данных. Object. Data. Source вызывает этот метод, чтобы реализовать разбиение на страницы. • Чаще всего данные все-таки получают из баз данных, XML-файлов или web-сервисов. Классы бизнес-логики могут разрабатывать одни члены команды, а заниматься дизайном страниц — другие. Их можно использовать и в обычных приложениях в Windows Forms.
Элементы-потребители данных. Data-Bound Controls • Потребители данных отображают данные, полученные из классов-источников данных. Они предоставляют много полезных функций. Например, элемент управления Grid. View может не только показывать данные, но и сортировать, выбирать, редактировать их. Если этой функциональности недостаточно, ее можно расширить, написав собственные обработчики событий. • Элементы, которые могут быть связаны с элементами-источниками данных, многообразны. Во-первых, это уже хорошо знакомые Drop. Down. List, List. Box, Check. Box. List, Radio. Button. List, Bulleted. List. Однако у всех них необходимо в качестве источника данных указывать не Data. Source, а Data. Source. ID. Все эти элементы отображать могут только одно поле, указанное в Data. Text. Field, с возможностью задания второго в качестве индексного в свойстве Data. Value. Field: • <asp: Sql. Data. Source ID="Sql. Data. Source 3" runat="server" Connection. String="» • Select. Command=»SELECT [Category. Name], [Category. ID] FROM [Categories]»> • • • • • • Append. Data. Bound. Items — это новое свойство. Оно позволяет комбинировать данные из элемента-источника с данными, статически объявленными на странице.
Repeater • Repeater в переводе означает «тот, кто повторяет». • Шаблон — это множество тегов HTML и серверных элементов управления, которые задают образец для отображения составной части сложного элемента управления. Data. Grid может использовать шаблоны или нет, но Repeater без них существовать не может — сам по себе он не имеет визуального представления. Таким образом, программист сам определяет его внешний вид. Кроме Data. Source. ID и Data. Member, собственных свойств у него нет. Поэтому у программиста есть полный контроль над тем, как выводится Repeater. • Как минимум, должен быть описан шаблон Item. Template. Header. Template отображается один раз в начале отрисовки репитера, Footer. Template в конце, Separator. Template между отображением каждого пункта, Alternating. Item. Template — для четных пунктов. Все серверные элементы управления в шаблон помещаются целиком, поэтому, чтобы получить таблицу, используют простые теги HTML. Например, открывающий тег
помещают в Header. Template, а закрывающий — в Footer. Template.
Data. List • Data. List имеет те же черты, что и Repeater , то есть выводит данные согласно шаблонам. Однако это более богатый элемент управления. Во-первых, он поддерживает выбор, редактирование, удаление и вставку. Поэтому список шаблонов пополнился Selected. Item. Template и Edit. Item. Template. Кроме того, у него есть верхний и нижний колонтитулы со стилями Header. Style и Footer. Style. • Во-вторых, можно изменить способы отображения. По умолчанию Data. List выводит данные поколонно в таблице. Свойство Repeat. Layout, установленное как Flow, убирает табличные теги из выходного потока. Repeat. Direction меняет направление вывода с вертикального на горизонтальное. Repeat. Columns задает количество столбцов таблицы, по умолчанию равное 1. • Data. List — наследник абстрактного класса Base. Data. List, который наследует Web. Control. Поэтому у него, в отличие от Repeater , имеются визуальные свойства. При отображении он представляет собой таблицу, поэтому присутствуют свойства Cell. Padding и Cell. Spacing. • У Data. List есть шаблон по умолчанию, Visual Studio и VWD создают его в виде вертикально расположенных меток для каждого поля, а слева от них помещают текст с названием поля. Чтобы войти в режим редактирования шаблона, нужно воспользоваться возможностью Smart. Tag — Edit Templates. После того, как редактирование окончено, необходимо выйти из режима — End Template Editing.
Data. Grid • Это очень популярный элемент управления, и неудивительно. Особенно много он применялся в ASP. NET 1. x, но теперь его функции перекрываются Grid. View. Тем не менее его стоит изучить, так как многие его свойства схожи со свойствами Grid. View. Data. Grid делает очень легким представление табличной информации, которая содержится в базах данных, файлах XML или создается вручную. Достаточно создать Data. Grid , установить свойство Data. Source и получить готовую таблицу на странице. Формат таблицы можно менять независимо от данных. Данные можно сортировать, выбирать, редактировать. • В простейшем варианте нужно установить только свойство Data. Source, его значением может быть объект, реализующий интерфейс IEnumerable, например Sql. Data. Reader, Data. Table. При этом на странице выводится таблица, где строкам соответствуют записи, а столбцам — поля.
Grid. View • Элемент управления Grid. View является усовершенствованным элементом, призванным заменить Data. Grid. Все сказанное о Data. Grid относится к Grid. View , но с немного другими названиями. Любой Data. Grid можно преобразовать в Grid. View , но не наоборот. Хотя в простейшем варианте Data. Grid отображает такую же таблицу, он наследник не Data. Grid, а Composite. Data. Bound. Control. • Главное преимущество Grid. View — автоматическое связывание с данными, благодаря чему нет необходимости писать обработчики событий, чтобы обеспечить функциональность, такую как удаление, редактирование, сортировка, разбиение на страницы при условии связывания с элементами-источниками данных. Он обеспечивает стандартную обработку подобных событий, но ее всегда можно расширить, чтобы обеспечить дополнительные возможности. • В отличие от версии 1. 1, новые элементы могут работать и на мобильных устройствах.
Details. View • Элемент управления Details. View — еще одна новинка ASP. NET. Он показывает каждый раз одну запись из источника данных в таблице с двумя столбцами, где слева отображается название поля, а справа — значение. Так же как и Grid. View , Details. View позволяет производить разбивку на страницы, редактирование и удаление с автоматическим связыванием с источником данных. Он также является наследником Composite. Data. Bound. Control. • Visual Studio предоставляет, как обычно, Smart. Tag, с помощью которого можно задать источник данных, автоформатировать элемент управления, отредактировать поля и шаблоны полей. У него есть шаблон Insert. Item. Template, которого нет в Grid. View. Details. View поддерживает разбиение на страницы, хотя на странице всегда только одна запись. • В отличие от Grid. View , Details. View позволяет вставлять записи. Для этого нужно установить значение свойства Auto. Generate. Insert Button= «True». При отображении появится кнопка New. • Еще один новый элемент Form. View похож на Details. View , но отличается от него тем, что нуждается в шаблоне для своего представления:
Зарегистрируйтесь, чтобы просмотреть полный документ!
РЕГИСТРАЦИЯ