WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!

Pages:     | 1 || 3 | 4 |   ...   | 7 |

«Exam 70-305 and 70-315 DEVELOPING WEB APPLICATIONS WITH MICROSOFT VISUAL BASIC AND MICROSOFT VISUAL Press Сертификационный экзамен 70-305 и 70-315 Разработка Web-приложений на Microsoft Visual ...»

-- [ Страница 2 ] --

2. кэшируемые события (cashed events) — сохраняются в состоянии отображения страни Обрабатываются, когда происходит событие, инициировавшее возврат 3. события проверки (validation events) — прямо на не требуют формы или кэширования.

рис. 2-16 показана очередность событий серверных управления мы. События проверяющих элементов управления обрабатываются до отправки на сервер. События и обрабатываются при возврате затем выполняется обработка событий и в последнюю очередь обрабатывается событие, инициировавшее возврат формы.

Клиент Сервер Текст Web-страницы | Проверяющий элемент — Запрос поле] Обработка кэширо элемент поле ванных событий Проверяющий Обработка события, вызвавшего возврат формы Рис. 2-16. генерации событий Web-формой Элементы управления Button, Button и Image Button генерируют события, возврат формы. В отличие от них элементы управления TextBox, ListBox, RadioButton и CheckBox кэшируемые события;

но их повеление мож но изменить, присвоив свойству значение True.

Чтобы пронаблюдать за взаимодействием событий типов, создайте Web форму и поместите на нее серверные элементы управления TextBox, и Button. Занесите в свойство проверяющего элемента управления значение Text Box 1, затем добавьте в обработчики событий поля и кнопки следующий код:

Visual Basic Private Sub sender As e As Handles End Sub Private Sub sender As Object.

ByVal e As Handles has End Sub Visual sender, } private void sender, e) has } Если оставить поле пустым и ОК, сработает только отобразив больше никакие события не обрабатываются и на сер вер не ввести в поле какой-нибудь текст и щелкнуть ОК, будет отправлена на сервер, при этом событие обработывается раньше собы тия Click.

Занятие 3. Обработка данных Из предыдущих занятий вы узнали, что работают на сервере. Однако в отличие от Windows-приложений, которые запускаются при вызове исполняемого файла пользователем и когда пользователь закрывает приложение, Web-приложе ния запускаются при первом запросе браузером Web-страницы и завершаются после ис полнения всех запросов.

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

установить границы приложения с помощью каталогов;

назвать три варианта исполнения в I1S;

объяснить, как параметры IIS влияют на производительность и приложений;

задавать значение косвенно определяющее момент завершения приложения. Кроме того, вы узнаете о роли структуры каталогов и параметров исполнения при разработке Продолжительность занятия — около минут.

Установка границ приложения IIS считает ем любой исполняемый им файл из каталогов ницы Web-приложения определяются структурой его каталогов: граница начинается в каталоге, содержащем начальную страницу приложения, и заканчивается в вло женном каталоге. На рис. показаны отдельные - ОДНО Web-приложение Рис. 2-17. Web-приложения в IIS Создавая проект Visual Studio генерирует каталог проекта и делает первую Web-форму проекта его страницей (start page).

Начальной считается страница, выбранная Visual Studio в качестве первой жаемой страницы приложения. Все вложенные каталоги, такие, как тями данного приложения, Если в ходе разработки изменилась структура приложения или во время отладки пона добилось оперативно загрузить текущую страницу, может потребоваться изменить ную страницу приложения.

Чтобы сделать HTML-страницу или Web-форму начальной страницей выполните действия, описанные далее.

В окне Project выберите Web-форму или HTML-страницу, которую нужно сделать на чальной страницей приложения.

2. В меню Project выберите команду Web As Start Page. Теперь Visual Studio будет эту страницу как первую отображаемую страницу приложе ния.

У каждого созданного вами проекта есть своя начальная страница, которая делает его отдельным приложением. IIS позволят объединить несколько проектов в одно Web-при ложение.

Чтобы передать подчиненное приложению, более вы сокий уровень выполните действия, описанные далее.

1. В I1S выберите подчиненное которое нужно включить в состав дру гого приложения, 2. В меню Action выберите команду Properties. В результате откроет окно свойств при ложения, показанное на рис. 2-18.

Una rt* to, Рис. 2-18. Диалоговое окно Properties 3. Щелкните кнопку Remove в этом окне. При этом начальная точка приложения будет удалена, а само приложение включено в состав приложения, расположенного на более высоком уровне каталогов. Щелкните чтобы принять изменения и вер нуться в IIS.

При изменении структуры приложения может потребоваться разделить большое при ложение, состоящее из нескольких каталогов, на несколько меньших.

Чтобы разделить Web-приложение, состоящее из нескольких каталогов, на меньшие приложения, выполните действия, описанные далее.

1. В IIS выберите подкаталог, который нужно сделать отдельным Web-приложением.

2. В меню Action выберите чтобы вызвать окно свойств приложения.

3. Щелкните Create, чтобы сделать выбранный каталог начальной точкой приложения.

Затем щелкните ОК, чтобы изменения и вернуться в IIS.

Изменение приложения может влиять на переменные состояния Application.

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

Управление процессами Важность границ приложения, устанавливаемых в IIS, и в том, что они определяют исполнения приложения на сервере. Web-приложение в IIS исполняется по одно му из трех вариантов.

1. В одном процессе с 1IS (в процессе Inetinfo.exe). Этот вариант обеспечивает большую производительность, поскольку все вызовы происходят в пределах одного процесса (In process), но делает сервер и другие приложения уязвимыми. Если в воз никнут сбои, оно может испортить данные как сервера так и других Web приложений, в этом 2. В одном процессе е другими и (в процессе Этот вариант, по умолчанию, считается компромиссным между безопасностью и произво дительностью. Сбои в приложении могут затронуть лишь его по процессу, но не Inetinfo.exe.

3. в собственном экземпляре DLLHost.exe. за щищены от влияния ошибок в других приложениях, а сбои в изолированном приложе нии не влияют на другие приложения. Однако вызовы, адресованные другим жениям, должны пересекать процессов, что снижает производительность.

Чтобы выбрать способ исполнения приложения в IIS, выполните действия, описан ные далее.

В IIS выберите каталог с начальной точкой приложения.

2. В меню Action выберите Properties. В результате IIS откроет окно свойств (см. рис. 2-18).

3. В раскрывающемся списке Application protection выберите подходящий вариант. Щел кните чтобы принять изменения и вернуться в IIS.

Чтобы не снижать надежности сервера, старайтесь выбирать варианты Pooled или Isolated. Вариант In-process — это наследие версий IIS, поддерживавших ис приложений только в одном с сервером.

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

обеспечивает наивысшую защиту от сбойных приложений, но снижа ет производительность из-за необходимости маршаллинга всех вызовов, адресованных другим приложениям. К тому же практический предел числа изолированных — не более 10 на один сервер, поэтому исполнение в изолированном следует использовать только для защиты приложений, критичных для бизнеса.

Определение момента завершения приложения Когда пользователь в первый раз запрашивает страницу I1S это приложение оно еще не запушено) и создает для этого пользователя сеанс. Все последующие запросы этого пользователя являются частью его сеанса. Сеансы важны по двум причинам:

• они позволяют ASP.NET сохранять специфичные для пользователя данные в перемен ных состояния Переменные состояния и Application обсуждаются в за нятии 2;

• они определяют момент завершения приложения. Как только заканчивается последний сеанс, MS завершает приложение.

g4 Глава Продолжительность сеанса определяется значением тайм-аута, заданным в файле Web.config. По умолчанию оно составляет 20 минут, то есть по прошествии 20 минут пос ле последнего запроса пользователя его сеанс завершается, а если нет других сеансов, за вершается и приложение.

Помните: IIS считает любой исполняемый им файл из каталогов Web-сайта, поэтому, если в течение 20 минут пользователь обратится к любому.aspx- или в одном из каталогов приложения, его сеанс продолжится.

Примечание Можно лишь косвенно определить момент завершения приложения, зада вая время тайм-аута. Это важный момент, поскольку от него зависит жизненный цикл при ложения на сервере.

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

Чтобы изменить значение тайм-аута сеанса, выполните действия, описанные 1. Откройте проект в Visual Studio 2. Откройте файл Web.config, дважды щелкнув его значок в окне Solution Explorer.

3. Измените значение тайм-аута (око выделено полужирным шрифтом), отредактировав следующую строку:

/> 4. Сохраните файл Web.config.

Резюме Web-формы используются для создания интерфейса на пользовательском компьютере посредством Ресурсы и код, обрабатывающий события, а также полезные вычисле ния, хранятся и работают на Web-сервере, на котором размешается приложение.

В силу распределенной структуры Web-приложений, они отличаются от приложений для Windows по четырем основным признакам:

• вместо элементов Windows используют серверные эле менты управления и • не имеют собственных окон и отображаются в окне браузера;

• срок жизни Web-форм очень мал, поэтому во время обработки страничных собы тий и событий элементов управления необходимо сохранять нужные в пе ременных состояния;

обработка данных происходит клиент и сервер обме ниваются данными в цикле запросов и откликов.

управляются событиями, которые происходят на уровнях приложе ния, страницы и элемента управления.

Существует три типа событий серверных элементов управления. Эти события проис ходят и обрабатываются в следующем порядке:

• события элементов управления происходят и обрабатываются от правки страницы на сервер;

• кэшируемые события накапливаются во время отображения и обрабатываются, как только страница отправит запрос на сервер;

• события, инициирующие возврат формы, заставляют страницу отправить на сервер запрос, но обработчики этих событий исполняются в последнюю очередь.

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

IIS позволяет создавать корневые каталоги приложений, устанавливать при ложения, а также выбирать процесс, в котором он будет исполнять приложение, Практикум 2. Создание простого Web-приложения В этом практикуме вы создадите простое FlashCards с одной формой.

Оно позволяет решать простые арифметические задачи и проверять введенный ответ совсем как карточки, которыми ученики на уроках математики в начальной Чтобы создать приложение FlashCards, следует поместить на новую Web-форму сер верные элементы управления и код, ими, в обработчик события Готовая Web-форма может выглядеть так, как показано на рис. 2-19.

я Flash Cards + Рис. 2-19. Готовая Web-форма приложения FlashCard Продолжительность практикума — около 20 минут.

Упражнение Создание пользовательского интерфейса Вы должны создать проект FlashCard и сконструировать пользовательский интер фейс приложения, поместив на Web-форму FlashCard серверные элементы управ ления.

Создание нового проекта Откройте новый проект ASP.NET Web application. В диалоговом окне New Project вве дите имя FlashCards и щелкните ОК.

2. В окне Properties переименуйте файл WebForml.aspx в элементов управления к пользовательскому интерфейсу Поместите на серверные элементы управления, показанные на рис. 2-19, и задайте для них свойства, перечисленные в таблице.

Имя управления Свойство Значение Label I Надпись ID Font Arial, Bold, XXL Text Flash Cards Надпись [D Font Arial, Bold, XXL Надпись [D IblSecond Font Arial, Bold, XXL Горизонтальная линия Size Color Text Box 1 Текстовое поле Font Arial, Bold, XXL Совет Если необходимо создать несколько серверных элементов управления с одинако выми свойствами, создайте первый присвойте его свойствам нужные затем размножьте при копирования-вставки.

Упражнение 2. Создание класса FlashCardClass Сейчас вы создадите класс с логикой и данными приложения Класс (class) — это определение объекта, используемого в программе для решения торой задачи. Подробнее об программировании рас сказано в главе 3, Мы создадим FlashCardClass, который случайным образом генерирует арифмети ческие задачи, отображаемые на Web-форме, это и будет логикой нашего приложения. В этом приложении, как и в большинстве логика (класс и (Web-форма) приложения разделены.

Как создать класс В меню Project выберите команду Add Class. Visual Studio откроет Add New Item. Назовите класс FlashCardClass и щелкните ОК.

2. В окне Code введите следующий код:

Basic Public Class Public Sub ' генератора случайных чисел.

= New Enc Web Forms Public Sub Min As Integer = 1, Optional ByVal Max As Integer = 12} ' Генерировать случайные числа.

= Next(Min, Max) = Max) End Public Readonly Property Get - mintFirstNurnber End Get End Property Public Readonly Property Get = End Get End Property Public As String Get Operation = mstrQp End Get Set(ByVal Value As String) mstrQp = Value End Set End Property Рассчитать ответ на основе текущего арифметического действия.

Public Function As Integer Select Case Case Answer - mintFirstNurnber + mintSecondNumber Case Answer = mintFirstNurnber * mintSecondNumber Case Answer = - mintSecondNumber Select End Function End Class C# public class { int mintFirstNumber, mintSecondNumber;

string Random mrndNumber;

public { // Инициализировать генератора случайных чисел.

= new public void Mm, int Max) { // Генерировать случайные числа.

= Max);

- Max);

Вызов метода Shuffle без параметров, по умолчанию - 0, Мах public void { // Генерировать случайные числа.

mintFirstNumber 12):

= Next(0, 12);

int { get [ return public int { return } public string Operation { get i return !

set Создание Web Forms mstrOp = value;

!

i // Рассчитать ответ на основе текущего арифметического действия, public int case + case return * case return rcintFirstNumber * nintSecondNumber;

case return default :

return 0;

Упражнение З. Сохранение объекта FlashCardClass в переменной состояния Session Сейчас вы добавите в файл код, переменную со стояния Session. Эта переменная предназначена для хранения объекта Flash используемого Web-формой. Файл содержит описание со бытий, которые происходят при запуске приложения и открытии новою сеанса, Объект FlashCardClass записывается в переменную Session для сохранения на про тяжении сеанса пользователя.

Создание переменной состояния Session Дважды файл в окне Project, затем щелкните ссылку «Click Here То Switch To Code 2. Чтобы создать обработчик события введите в окне Code View код:

Visual Basic Session_Start(ByVai Sender As Object, E As EventArgs) Создать новый объект FlashCard Dim FlashCard As New Сохранить в переменной Session.

= End Sub 2 простого Visual protected void sender. e) { // Создать новый объект FlashCardClass FlashCard // созданный объект в - FlashCard;

;

Упражнение 4. Обработка событий Web-формы с использованием класса FlashCardClass Сейчас вы добавите к Web-форме код, который позволит ей использовать FlashCardClass, сохраненный в переменной состояния чтобы соединить ло гику приложения (класс FlashCardClass) с его интерфейсом (Web-формой Flash aspx).

Как задействовать объект в обработчиках событий Web-формы Откройте в окне Code модуль кода Web-формы дважды ее любую область.

2. Объявите на уровне модуля для сохранения объекта FlashCardClass из переменной состояния Session.

Visual Basic Dim FlashCard As New FlashCardClass Visual C# FlashCardClass FlashCard;

3. Чтобы присвоить значение переменной состояния Session только что объявленной пе ременной, добавьте в обработчик события код:

Basic Private Sub sender As e As Handles Получить объект FlashCard из переменной состояния Session.

FlashCard = End Sub Visual C# private sender, e) { // Получить значение FlashCard из переменной состояния Session, FlashCard = 79 Forms 4. Дважды щелкните файл в окне проекта, затем дважды щелкните тексто вое поле. Добавьте в обработчик события следующий код:

Visual Basic Private Sub sender e As Handles If Then Получить другой чисел.

страницу, чтобы новые числа.

Сбросить ответ.

= Else IblFeedback.Text - "Oops! again."

End If End Sub Visual C# private void sender, e) { == FlashCard.

{ // Получить другой набор чисел.

// Обновить страницу, чтобы показать новые числа.

// Сбросить ответ.

= } else { IblFeedback.Text - "Cops! Try 5. Введите кол вспомогательной процедуры, обновляющей текст надписей:

Visual Basic Private Sub = & FlashCard End Sub 2 Созданий простого C# private void Ref { = = + FlashCard.

} 6. Запустите приложение и проверьте его работу.

Совет Хранение значений переменных состояния Session и в переменных, объ явленных на уровне формы (см. пункты 2 и 3) помогает избежать ошибок. Поскольку в Visual Studio объявлять переменные состояния не обязательно, опечатка в имени пе ременной состояния просто приведет к созданию новой пустой переменной Закрепление материала Приведенные ниже вопросы помогут вам лучше усвоить основные темы данной главы.

Если вы не сумеете ответить на вопрос, повторите материал соответствующего Ответы для самопроверки — в приложении «Вопросы и ответы» в конце книги.

Где в Visual Studio хранятся Web-приложений?

2. Перечислите основные отличия Web- и 3. Опишите жизненный цикл Web-приложения. Когда создаются Web-формы и как долго они существуют?

4. Как сохранить данные простой в 5. Что определяет границы Работа с Web-объектами Занятие Основы пространств имен Занятие 2. Пространства имен в Занятие 3. Сохранение сведений о состоянии В этой главе В этой главе как создавать и упорядочивать объекты в Microsoft Visual Studio применять объекты, поддерживаемые а также сохранять объекты и. дан ные в промежутках между запросами к Web-форме. Visual Basic и используют инфраструктуру, поэтому приемы про граммирования (ООП), описанные в этой главе, будут применимы ко всем языкам про граммирования Web Forms.

Прежде всего Для изучения материалов этой главы вам необходимо:

• знать основы Visual Basic, C# или C++, в том числе понятия переменной, процедуры, структуры решений (decision structure) и области видимости. Эти сведения приводятся в разделах Changes in Visual Basic» и Language Tour» справочной систе мы Visual • понимать события, составляющие жизненный (он обсуждается в занятии 2 главы 2).

с Занятие Основы пространств имен Языки Visual Basic и Visual все ООП, включая абст рактные классы, интерфейсы, а перегрузку и переопределение членов класса. Эти фундаментальные языковые возможности повсеместно используются в Framework.

Если вы научитесь применять их самостоятельно, то поймете, как устроена инфраструк тура Framework и сумеете более использовать ее в своих приложениях.

Изучив материал этого занятия, вы сможете:

упорядочивать код с использованием пространств имен;

создавать классы и управлять доступом к ним;

объявлять абстрактные и базовые классы и порождать от них новые классы;

понять, как используются перегрузка, переопределение и замещение методов, унаследованных от базового класса;

создавать интерфейсы и объяснять, чем они отличаются от абстрактных классов.

Продолжительность занятия — около 40 минут.

Знакомство с пространством имен Возможно, вы заметили, что в примере файла Global.asax из предыдущей главы код, сге нерированный Visual Studio, содержит строки:

Visual Basic Imports Imports Visual using System using Эти операторы позволяют использовать классы из пространств имен System и не указывая их полное имя. Не будь их, вызывать простые методы из простран ства имен System бы так:

Visual Basic Visual Импортировав в начале кода пространство имен удается сократить вызов мето да Array:

Visual Basic Visual Пространства имен позволяют упорядочить код. Они от имен, иногда также называемых пространств имен (namespace collisions), что особен но важно в больших проектах, где велика вероятность случайного появления с одинаковыми именами. Упорядочение кода при помощи пространств имен снижает веро ятность подобных конфликтов. Чтобы создать пространство имен, следует класс или модуль в блок Namespace.

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

Операторы, выделенные в примере шрифтом, создают про странство имен для модуля Strings:

Visual Basic ' Имя проекта: Wombat.

Namespace Public Module Strings Public Function Sort(ByVal strText As String, Optional As Boolean = True) As String ' Объявить и строковый массив.

Dim strArray As = Преобразовать в массив при помощи класса ' ' Выполнить сортировку с использованием класса Если массив не упорядочен по алфавиту, отсортировать его в обратном порядке.

If Not Then ' Отсортировать элементы в обратном порядке ' с помощью rAr End If Вернуть строку.

Sort - strArray) End Function End Module End Namespace Visual C# // Имя проекта: Wombat.

namespace Utils { class Strings { // Этот код принимает строку и возвращает ее в упорядоченном виде public static string Sort(string strText, bAlphaOrder) /I // Объявить и строковый массив.

string[] = = // Преобразовать строку в массив при помощи класса strArray = // сортировку с использованием класса // Если массив не упорядочен по алфавиту, // отсортировать его в обратном порядке.

if { // Отсортировать элементы в обратном порядке с // !

// Вернуть строку.

return strArray);

// Тот же метод, но с public static string Sort(string strText) { return :

Внимание! В предыдущем примере помимо использованы два пространства имен и Пространство имен System — новый механизм доступа к функциям, которые в API Windows были доступны через оператор Declare. Теперь добраться до нужных функций еще легче, поскольку языки Visual Basic Visual и Frame work используют скалярные типы данных и соглашения о передаче параметров по умолчанию. В отличие от APT Windows, пространства имен обеспечивают для функ ций Windows интерфейс. Если вы привыкли к API Windows, использование пространств имен потребует некоторых усилий, однако это сполна компенсируется выгодой от общеязыковой исполняющей среды и управля емого кода.

Поскольку код, упорядоченный при пространств имен, должен оставаться открытым, пространства имен являются открытыми по определению. Ссылки в тексте программ на код, расположенный в некотором пространстве имен, имеют следующий вид:

Есть два способа вызова кода из некоторого пространства имен в приложениях.

• При помощи полного имени. Код, выделенный в показанном ниже примере полужирным шрифтом, вызывает функцию Sort из пространства имен Wombat. Utils:

Visual Basic Sub sender As e Handles Выполнить сортировку текста.

TextBoxl.Text = Sub End Class Visual void Button1_Click(object sender, e) TextBoxl.Text = При имени. Добавив в начато Visual Basic (или в случае класса Visual C# — оператор using), можно ссылаться на члены по именам. Этот способ реализован в коде, использующем про странство имен Utils из проекта Wombat (см. строку, выделенную шриф Visual Basic Private Sub sender As ByVal e As Handles Вызвать вспомогательную функцию TextBoxl.Text End Sub Class Visual private void sender, EventArgs e) TextBoxl.Text = Работа с В ссылках пространства имен имена, занимающие разные иерархические уровни, раз деляются точкой. Рассмотрим следуюшее объявление:

Visual Basic ' Имя проекта: Wombat Namespace Namespace Types Namespace Digits Public Numeric One Two Five Six Seven Eight Nine End Namespace End Namespace End Namespace Visual C# // Имя проекта: Wombat namespace Utils { namespace Types { Digits { public Numeric { One, Two, Six, Eight, Nine Это объявление такому:

Visual Имя проекта: Wombat Namespace Public Numeric Zero Two :-;

* Seven Eight Nine End Enum End Namespace Visual C# Имя проекта: Wombat namespace { class Digits public enum Numeric One, Two, Three, Four, Six, Seven. Eight, Nine Для ссылки на пространство имен, объявленное выше, можно использовать полное имя, например, так:

Dim As Visual C# Utils. Numeric Альтернативный способ — добавить оператор Imports или using и указать ное имя:

Visual Basic Imports Dim numVar As Numeric Visual numVar;

Ссылки проекта и оператор Imports Чтобы использовать пространство имен, расположенное вне проекта, следует добавить в проект ссылку на в котором оно находится, и импортировать это пространство имен с помощью оператора В таких случаях оператор Imports — это просто механизм, позволяющий применять сокращенные имена для обращения в коде к классам и членам из внешнего пространства имен.

Чтобы добавить в проект ссылку, следующие действия:

1. В меню Project выберите команду Add Reference — Visual Studio откроет диалого вое окно Add Reference, показанное на рис.

2. Перейдите на ЕТ, СОМ или Project, выберите из списка компонент, на кото рый нужно добавить ссылку, и щелкните ОК.

3. В результате Visual Studio добавит в окно Project ссылку на выбранный компонент.

1.0.0.0 am., 9.1.3300.0 am Ions, 9.1.3300.0 am am • •'< am., 9.1.3300.0 C:\Pr am 1.0,0,0 am 1.0.0.0 am 1.0.0.0 am ' I", Рис. 3-1. Добавление ссылки в проект Классы и модули Проекты Visual Studio хранят код в классах и модулях. Поддержка классов, отличающихся от модулей кода, введена в прежних версиях Visual Basic и продолжается в Visual Basic классы представляют элементы, для себя память ты), а модули содержат код, не постоянных данных. Работая с классом, вы сна чала создаете объект этого класса, а пользуетесь им, а модули кода вы просто вызы ваете напрямую.

В отличие от Visual Basic в Visual C# весь код размещается в классах. Если нуж но создать методы или свойства, доступные без предварительного создания объекта, их следует определить как статические. Метод класса Unit, созданный в предыдущем раз деле, может служить примером эквивалента модуля Visual Basic в Visual В этих языках при работе с модулями и классами используются пять ключевых поня тий, новых для Visual Basic и для Visual C# тоже, поскольку это абсо лютно новый язык). Однако эти понятия наверняка знакомы программистам на C++, В таблице ключевые понятия ванного программирова ния применительно к языкам Visual Basic и Visual C#.

Таблица 3-1. Ключевые понятия ООП Понятие Visual Basic C# Определение Некая сущность определяется как класс Классы определяются при помо или модуль при блоков ши ключевого слова class, Class или исполняемый код является В версиях это опре- частью класса делялось типом поэтому в одном файле могло быть не больше одного класса или модуля Доступ пять уровней доступа Существует пять уровней доступа к классам, модулям и их членам: к классам и их членам:

Friend, Protected Friend protected и Уровень доступа задает- и private ся в определении элемента, а не выво дится из свойств файла Наследование Классы могут наследовать члены от Классы могут наследовать члены других а затем от базовых классов и замещать или перегружать делять либо перегружать унаследованные члены унаследованные члены У классов есть методы New и Finalise, Классы имеют торы и вызываемые соответственно при торы и деструкторы, деструкторы создании и уничтожении объекта при создании и уничтожении данного класса и объектов его объектов данного класса и объ производных классов ектов его производных Имена конструкторов и деструк торов совпадают с именем их класса, только имя предваряется тильдой Абстрактные Допускается создание Допускается определение интер классы а также абстрактных классов, методов фейсов, а также абстрактных и интерфейсы и свойств. Интерфейс содержит классов, методов и свойств.

список имен членов с указанием их Интерфейссодержит список имен параметров для классов, членов с указанием их для классов, данный интерфейс. Абстрактные члены являются шаблонами членов, данный интерфейс.

наследуемых производными классами члены являются членов, наследуемых производ ными классами Создание классов, модулей и управление доступом к ним В Visual Basic для определения классов и модулей применяются блоки Class и в Visual классы определяются с использованием ключевого слова class. В файле может быть несколько классов и/или модулей. Классы и модули, ко торым будут доступны члены данного класса или модуля, определяются с помощью моди фикаторов перечисленных в 3-2.

с Таблица 3-2. Уровни доступа к классам и модулям Visual Basic Visual Кому модуль или класс Public public Всем членам любых классов и проектов Friend internal Всем членам текущего проекта protected Всем членам текущего класса и его производным классам.

Этот модификатор годится только для определений членов, его нельзя применять в определениях классов или модулей protected Всем членам текущего класса и его производным классам.

Friend internal Этот модификатор годится только в определениях членов, его нельзя применять для определений классов или Private private Только членам текущего класса Например, класс доступен только в текущем проекте:

Visual Basic Friend Translator Private As String Этот код управляет доступом к на уровне модуля.

Property As String Get Text = mstrText End Get 3et(ByVal Value As mstrText = Value End Set End Property значение свойства Text.

Public Sub Dim strWord As String, As Integer Dim As String Dim bCaps As Boolean Преобразовать строку в при помощи arrWords = = 0 To Проверить, начинается ли слово с заглавной буквы, If о Then bCaps = True arrWords(intCount) = End If strWord = Выполнить трансляцию.

If strWord <> Then strWord - - 1) & _ 1 Основы имен 1) & "ay" -заглавной, If bCaps Then = _ 1) End If If Записать слово обратно в strWord ' Сбросить флаг заглавной буквы, bCaps False Next ' Собрать строку из элементов массива.

mstrText = End Sub End Class Visual C# internal class Translator i string mstrText;

// Этот код управляет доступом к переменным, // объявленным на уровне класса.

public string Text { { return } { mstrText - value;

// Транслировать значение свойства Text.

void { string strWord;

string[] arrWords;

bCaps // Преобразовать строку в массив при помощи arrWords = ');

for(int intCount - 0;

<= с !

// Преобразовать в регистр.

strWord = // Проверить, ли слово с заглавной bCaps // Вьполнить (strWord != { strWord - 1) + + "ay";

Сделать первую букву заглавной, если нужно, if(bCaps) strWord = + - 1):

} I/ Записать слово з массив.

= // Сбросить флаг заглавной буквы.

bCaps = false;

} // Собрать строку из массива.

} ;

Свойство Text и метод Translate класса этом примере удается вызывать толь ко из проекта, в котором находится этот класс;

из других проектов эти члены не доступ ны. Следующий код демонстрирует использование членов и в Web-форме (см. строки, выделенные шрифтом):

Basic Private Sub sender As e As System. Handles Click Создать новый объект Translator, Dim As New Передать введенный текст Translator, = Нажми на получишь результат!

= Sub Visual C# private void sender, e) { // Создать новый Translator.

Translator TranslateText = new // Передать введенный текст Translator.

= // Нажми на // результат!

txtlnput.Text = } Изучая сгенерированный Visual Studio код Web-формы, обратите внимание, что серверные элементы управления Web-формы объявляются с Protected:

Basic Protected Protected C# protected txtlnput;

protected butTranslate;

По умолчанию объекты серверных элементов управления делают доступными только Web-форме и производным от нее формам.

Наследование: кто от кого родится?

— это объявление нового (производного) класса на основе (базового). При этом производный класс использует методы, свойства и прочие члены ба зового класса. Наследование облегчает повторное применение и сопровождение кода: до статочно поместить код в базовый класс, чтобы сделать его доступным для всех этого базового класса. Степень знакомства программиста с наследованием обычно опре деляется языком, на котором он пишет.

• С Visual Basic наследование пришло и в Visual Basic. Это был огромный впе ред для языка, обусловивший многочисленные изменения в Visual Basic по срав нению с прежними версиями Visual Basic. В отличие от всех предыдущих Visual Basic Windows-формы и типы данных теперь происходят от классов Framework, а взаимодействие Visual Basic и Windows стало намного более гармоничным и упорядоченным.

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

Abstract

и virtual.

Выражение наследования зависит от языка программирования. В Visual Basic ЕТ для объявления нового класса на основе существующего используется оператор Inherits, а в это делается вовсе без ключевых слов, в определении класса:

Visual Public Class DerivedClass Inherits BaseClass End Class Visual C# public class DerivedClass : BaseClass В таблице 3-3 ключевые слова, используемые Visual Studio для объявле ния базовых и производных классов. В следующих разделах их применение разъясняется более подробно.

Таблица 3-3. Обзор ключевых слов, используемых при наследовании Visual Basic Visual Имя Базового Класса Объявляет на основе базового класса производный класс, наследующий члены базового класса Указывает, что этот член базового класса может быть переопределен в производном классе Объявляет, что данный член производного Overrides override переопределяет член базового класса Shadows Указывает, что данный член производного класса замещает одноименный член базового класса Объявляет данный класс шаблоном для производных классов. Такие классы абстрактными (abstract), объекты этих классов нельзя abstract Объявляет данный член шаблоном для членов производных классов. Такие члены называются абстрактными, их нельзя вызывать base Вызывает из производного класса член базового класса this Вызывает член из экземпляра класса Interface interface. Объявляет интерфейс с определением членов, которые должен поддерживать класс Implements Использует в классе определение из интерфейса Прежде чем особенности наследования, следует запомнить, чего нельзя делать при помощи наследования. Таких вешей две:

• нельзя производный класс на основе двух и более базовых классов.

ция множественного наследования (multiple inheritance) поддерживается во многих язы ках программирования, но на практике применяется редко. Тем не менее у производ ного класса может быть несколько предков (базовых классов), если они занимают раз ные уровни иерархии классов;

• нельзя породить класс от аналогичного базового класса. Хотя определяются в виде классов, Visual Studio не поддерживает объявление новых на основе Переопределение, перегрузка и замещение членов Производный класс наследует члены базового класса. Если класс ет член с той же сигнатурой, считается, что член производного класса (override) член базового класса. Сигнатура (signature) члена включает имя, список его па раметров с указанием их типов и тип возвращаемого результата.

Если производный класс член с тем же именем, но с другим набором (или типом) параметров и типом возвращаемого значения, говорят, что член производного класса перегружает или замешает член базового класса. Перегрузка (overload) имеет место, если член базового класса остается доступным, в противном случае выполняется замеще ние (shadowing).

В следующем примере класс Sphere будет объявлен на основе класса В Visual Basic члены, которые могут быть переопределены, следует объявлять с ключевым словом (1), а в Visual — с ключевым словом virtual (1). Для приведем код класса Basic Public Class Circle Private syCenter As Single Private As Single Public Property As Single Get Top - sxCenter - sRadius End Get Value As Single) sxCenter - Value + sRadius Set End Property Public Property As Single Get Left - syCenter - sRadius End Get Value As Single) syCenter = Value + sRadius End Set End Property Public Overridable Function As Single ' (1) Area = * (sRadius " 2) End Function Public Function As Single Работа с Perimeter = 2 * End Function Public Property As Get Radius End Get Set(ByVal Value As Single) sRadius = Value End Set End Property Public Sub X As Single, Y As Single) (1) sxCenter = X syCenter = Y End Sub Class Visual C# public class Circle { float fxCenter, fyCenter, // Это конструктор, public { // Инициализировать переменные, fxCenter = 0;

fyCenter = 0;

fRadius = 0;

} public float Top { { return fxCenter - fRadius;

i set { fxCenter = value + fRadius;

} !

public float Left { { return fyCenter - fRadius;

!

set fyCenter - value + public virtual float // (1) { return * public float { return 2 * fRadius * } public float Radius { !

return fRadius;

} set { fRadius = value;

} public virtual void X, float Y) // (1) fxCenter X;

fyCenter = Y;

} ;

Класс Sphere (см. пример кода далее) наследует все методы и свойства, в классе Circle Sphere переопределяет метод (2), так как сферы вается иначе, чем окружности. Sphere замещает метод (3), поскольку у есть дополнительная координата (z). Замещение здесь позволяет подстраховаться от невнима тельности пользователя, который, задавая координаты центра сферы, может про Z.

Заметьте, что Sphere использует ключевое слово (это в случае Visual Bask, а для Visual C# — base), чтобы из замещающего метода вызывать метод Center базового класса Visual Basic Public Class Sphere Inherits Circle ' (1) Private sCenter As Single с Public Overrides As Single ' = 4 * * " 2) End Function Public Shadows Sub X As Single, Y As Single, Z As ' (3) • (4) sCenter - Z Sub Public Function As Volume = 3) * * (Radius " 3) End Function Public Property Front() As Get Front sCenter - Radius End Get Set(ByVal Value As Single) sCenter = Value + End Set End Property End Class Visual C# public class Sphere : Circle // float fCenter;

// public SphereO { // Инициализация внутренней переменной.

fCenter = 0;

public override float Area() // (2) { return * * i new void Y) // (3) { Y, 0);

} public void Center(float X, float Y, float Z) Y);

// (4) = Z;

\ public float { return (float)((4 / 3) * * public float Front { get { return fCenter } set { fCenter - value + I Чтобы увидеть наследование в создайте объекты Circle и Sphere и попробуйте вызвать их свойства и методы. Следующий код демонстрирует работу классов Circle и Sphere, отображая рассчитанные ими значения на Web-форме:

Visual Basic Private Sub sender As e As Handles Dim As New = 2) & & & & Dim As New = 20, 25) top: & & left: & & front: & & volume: & & surface area: & & & & End Sub Работа с private void sender, e) { Circle MyCircLe = = 2:

2);

+ + circumference: + + Sphere = new = 10;

top + + left: + + front: + + volume: + + + + + MySphere. + Немного абстракции Среди прочего Visual Studio допускает объявление абстрактных классов. Абстрактный класс определяет интерфейс производных классов, по являясь соглашением о том, что все объявленные на его основе классы будут поддерживать определенные методы и свойства. Нельзя создать объект абстрактного класса, можно лишь использовать его как предок новых классов.

В Basic абстрактные классы объявляются при помощи ключевого слова Must Inherit, а в Visual C# для этого служит ключевое слово abstract. Все методы и свойства, которые должны быть шаблонами членов производных классов, объявляются в Visual Basic с ключевым словом а в Visual C# — с ключевым словом abstract. Примером абстрактного класса может класс Shape:

Определение абстрактного класса, Public Class Shape Public MustOverride Property As Single Public MustOverride Property As Single Public MustOverride Function As Single Public MustOverride Function As Single End Class Visual // Определение абстрактного класса.

public abstract class Shape { public abstract float Top { get;

} abstract float Left { public abstract float Area();

public abstract Perimeter();

\ Обратите внимание, что члены, объявленные с ключевым словом (на а для Visual C# — — это пустые в них нет операторов, составляющих тело процедур, поскольку эти члены следует определять в производных классах.

класс Circle демонстрирует наследование от абстрактного класса. В про грамме на Visual Basic оператор Inherits объявляет, что данный класс является производным от абстрактного класса Shape. В объявлении каждого из членов, переопре члены абстрактного класса, должно быть ключевое слово Overrides (2). В вари анте примера, написанном на Visual C#, определение класса объявляет абстрактный класс Shape базовым классом Circle (1). При этом в определении каждого члена, переопределяю член абстрактного класса, также должно быть ключевое слово override (2).

Visual Basic Public Class Inherits Shape (1) Private syCenter As Single Private As Single Public Overrides Property As Single ' (2) Get Top = sxCenter - sRadius End Get Value As Single) sxCenter - Value + End Set End Property Overrides Property Left() As Single Get Left = - sRadius End Get Работа Set(ByVal Value As Single) - Value + End Set End Property Public Overrides Function Area() As Single = 2 * * (sRadius " 2) End Function Public Function As Single Perimeter = 2 - sRadius * End Function Public Property As Single Get Radius = sRadius End Get Set(ByVal As Single) sRadius = Value End Set End Property Public Sub Center(ByVal X As Single, Y As sxCenter = X syCenter - Y Sub End Class C# public class Circle : Shape // (1) { float fxCenter, fyCenter, // public { // Инициализация внутренних переменных.

fxCenter = 0:

fyCenter = 0;

fRadius - 0;

public override float Top // (2) !

g< ;

1 Основы имен return fxCenter - fRadius;

set fxCenter = value + fRadius;

public override float Left get return fyCenter - fRadius;

set fyCenter - value + fRadius;

public override float Area() !

return (float)(2 - public override float { return 2 * fRadius * public float { get { return fRadius;

} set { fRadius - value;

public virtual void X, float Y) fxCenter - X;

fyCenter = Y;

} Лицом к интерфейсу Интерфейсы (interfaces) абстрактным классам в том, что и те и другие предостав ляют шаблон для новых классов. Отличаются они тем, что в интерфейсах начисто отсут ствует реализация членов, в то время как в абстрактных классах могут быть реализованы некоторые члены, которые впоследствии станут общими для всех производных от них классов.

Интерфейсы больше похожи на типы, чем на классы. Если реализовать в классе неко торый интерфейс, то объекты этого класса можно использовать как значения аргументов и объявленных с типом интерфейса. Например, следующий код объяв ляет интерфейс для объектов фигур, которые создавались в примерах, показанных ранее:

Visual Basic Интерфейс для всех фигур.

Public Interface IFigure Property As Single Property As Single Function As Single Function As End Interface Visual C# // Интерфейс для всех public interface IFigure { float Top { get;

set;

I float Left { get;

float Area();

float Чтобы использовать этот интерфейс, следует объявить его в классе следующим обра зом (см. строку, выделенную полужирным шрифтом):

Visual Basic Определение абстрактного класса.

Public Class Shape Implements IFigure Public Property TopO As Single Public MustOverride Property О As Single Implements Public Function Area() As Single Implements Public Function Perimeter() As Single Implements End Class Visual public class Shape : IFigure { // public { public float Top public abstract float Left get;

set:

} abstract public abstract float Поскольку здесь интерфейс IFigure реализован в абстрактном классе Shape, цию интерфейса IFigure унаследуют все классы, производные от Shape. Это означает, что объекты классов Circle и Sphere (классов-потомков Shape) могут служить значениями аргу ментов, объявленных с типом IFigure, как показано в следующих примерах:

Visual Basic Private Sub sender As e As Handles Создать окружность.

Din As New - 2) Создать сферу.

As New SphereC) - 20, 25) Показать сведения о каждой из фигур, с End Sub Отобразить сведения о фигуре на Web-форме.

Sub Shape As IFigure) top: & & left: & & volume: & & surface & & perimeter: & & Sub Visual C# private e) { // Создать окружность.

Circle - new = 2;

2);

// Создать Sphere - 10;

// Показать сведения о каждой из фигур.

// Отобразить сведения о фигуре на Web-форме.

private Shape) { // Поскольку аргумент Shape имеет тип IFigure, // мы что у него есть члены.

top: + + left: ' + + perimeter: + + area: + + } Важно, чтобы в каждом классе, где реализован интерфейс, обязательно были все эле менты, определенные в этом интерфейсе. Если пропустить хоть один из них, Visual Studio генерирует ошибку времени 2. Пространства имен в Web-приложениях Из этого занятия вы узнаете, как найти среди пространств имен объекты, необ ходимые создания Web-приложений. Кроме того, вы научитесь работать с объектами Application, Page, Request и Response, основу программирования Web-при ложений.

Изучив материал этого занятия, вы сможете:

найти в Framework объекты, необходимые для создания понять взаимосвязи объектов в архитектуре ASP.NET;

получать объекты ASP.NET и ими в коде;

просматривать иерархию объектов для получения подчиненных объектов таких, как Browser и Cookies.

Продолжительность занятия — около 30 минут.

Обзор пространства имен Web Определения классов, представляющих объекты, которые используются в Web-приложе ниях, находятся в пространстве имен System-Web. В 3-4 определена иерархия про странств имен, расположенных в Web, и описаны определения классов, которые находятся в каждом из них. Эта таблица пригодится вам при поиске объектов, необходи мых для выполнения различных задач, Таблица 3-4. пространства имея System. Web Пространство имен Какие классы содержит System. Web Application, Browser, Cookies, Exception, Response, и Trace. Эти классы необходимы для решения большинства задач Объект Application, определяемый в файле является экземпляром класса System. Session. Используется для сохранения и извлечения элементов Stare из переменных состояния Session System. Требуется для создания Web-сервисов и работы с ними Page и Control. Применяется в для создания пользовательско го интерфейса и управления им, представлены классом Page Классы всех серверных элементов управления, используемых в Web-формах System. Web. Классы всех управления, применяемых в System. Cache. Необходим для управления кэшированием на стороне с целью повышения производительности приложения System. Mail и Требуются для отправки из приложения сообщений по электронной почте System. Содержит классы объектов и модулей аутентификации, исполь для аутентификации пользователей и обеспечения конфиденциальности при работе с приложениями При программировании Web-приложений приходится непосредственно иметь дело с двумя типами созданными на основе классов из пространства имен Web:

• объект Происходит от класса В приложении соответствую щее определение находится в файле Global.asax;

• объекты Web-форм. Происходят от класса Page. В приложении соответствующее опре деление хранится в модулях форм.

код демонстрирует объявления классов Global и WebForml, генерируемые Visual Studio. автоматически создает экземпляры этих классов во время выпол нения.

Visual Basic Public Class Global Inherits Class Visual C# public class Global :

public class :

!

i Объекты Global и WebForml — точки входа, доступ к остальным Web объектам приложения. С ними, а также с объектами Request и Response в коде приходится работать особенно часто. В следующем разделе разъясняется, как с помощью объектов Application, Request и Response получать другие объекты.

Использование объекта Application Объект Application занимает верхний уровень иерархии объектов Web-приложения и слу жит для конфигурирования приложения и сохранения сведений о состоянии. Свойства и методы объекта открывают доступ к другим объектам Web-приложения 3-2).

Запуская приложение, автоматически создает экземпляр объекта оп ределенного в файле Global.asax. С помощью событий объекта Global удается конфигури ровать приложение и инициализировать переменные состояния, объявленные на уровне приложения.

От базового класса объект Global наследует свойства и методы (табли 3-5) для доступа к своим подчиненным объектам. Эти свойства и методы служат для получения других объектов из объекта Application.

Application J Context Request Response Server Session Рис. 3-2. Объект Application 3-5. Свойства и методы объекта Application Имя Назначение Application Сохранение элементов данных в переменных состояния Context Получение объектов Trace, Cache, Error и других для текущего Доступ к модулям HTTP Request Чтение запросов и получение объектов Browser, и Files из текущего запроса Response Запись в отклик текста и а также получение объектов Cookies и из текущего отклика Server Обработка запросов и откликов. Вспомогательные методы для и декодирования поддерживаются объектом Server Session Сохранение данных в переменных состояния Session User Получение результатов аутентификации пользователя, сделавшего запрос. По умолчанию разрешают анонимный Следующий код проверяет при помощи объектов Request и Browser, доступных из объек та Application, прислан ли запрос браузером с номером версии 4.0 или выше.

Basic Sub sender As e As EventArgs) Этот код исполняется перед обработкой каждого запроса.

< 4 Then Отключить дополнительные возможности.

End If End Sub protected void sender, EventArgs e) Глава // Этот код исполняется перед обработкой каждого < 4) Использование объекта Page Объект Page пользовательским интерфейсом приложения. Свойства и методы объек та Page обеспечивают доступ к другим объектам пользовательского интерфейса (рис. 3-3).

Page Cache Controls Request Response Server Session J Trace Рис. Объект Page Когда пользователь запрашивает У приложения, ЕТ автоматически со экземпляр Web-формы и отображает запрошенную а написать обработчи ки событий, управляющие пользовательским интерфейсом и с поль — забота разработчика.

Основные методы и свойства, чаще всего требуются при программировании Web-форм (их сводка дана в таблице 3-6), наследуются от базового класса Page.

Таблица 3-6. Свойства и объекта Page Имя Назначение Application Сохранение данных в переменных состояния Application Cache Управление кэшированием откликов на сервере Получение элементов управления Request Чтение запросов и из запроса объектов Browser, Cookies и Files Response Запись текста и данных в отклик, а также получение из текущего отклика Cache, Cookies и Output Server Обработка запросов и откликов. Объект Server предоставляет вспомогательные методы для кодирования и декодирования URL Session Сохранения элементов данных в переменных состояния Session Включение и выключение трассировки, а также запись трассировочных данных в журнал Следуюший код добавляет новый элемент управления на Web-форму во время выпол нения:

Visual Basic Private Sub sender As e As Handles Создать новый элемент управления, As New Записать в поле элемента управления какой-нибудь текст.

= "Some new text" Добавить элемент управления, заключенный между тэгами

и End Sub private void e) { // Создать новый элемент управления.

txtNew = new Text8ox();

// Записать в поле элемента управления какой-нибудь текст.

"Some text";

// элемент управления, между тэгами // и Controls.

Использование объекта Request Объект Request содержит информацию, присланную клиентским браузером при !.апросе страницы приложения. Свойства и методы объекта Request открывают доступ к другим объектам запроса (рис. 3-4).

Request Browser I Cookies Files Рис. 3-4. Объект Request Свойства и методы объекта Request открывают доступ к его подчиненным (таблица 3-7).

3-7. Свойства и методы объекта Request Имя Назначение Browser Определение возможностей браузера. Свойства этого объекта указывают номер версии браузера, является ли он браузером AOL, ли он файлы cookie и некоторую другую Аутентификация клиента Cookies Получение информация от клиента в виде файлов cookie Получение файлов, закачиваемых клиентом Чтение и запись присланного запроса в виде неструктурированных данных Следующий код использует объект чтобы перед сохранением содержимого cookie в переменной состояния Session проверить, поддерживает ли браузер файлы cookie и существует ли этот файл cookie.

Visual Basic Private Page_Loac(ByVal sender As e As Handles Этот код исполняется при первом страницы.

If Not IsPostBack Then Проверить, поддерживает ли браузер файлы cookie.

If Проверить, существует ли cookie по имени If Not Then Сохранить cookie.

If End If End If End Sub Visual private void Page_Load(object sender, e) { Этот код исполняется при отображении страницы.

// ли браузер файлы cookie.

i Проверить, существует ли cookie по UName, != null) // Получить значение cookie.

= Использование Response Объект Response применяется для формирования отклика сервера, пересылаемого клиен тскому браузеру. Свойства и методы объекта Response обеспечивают к объектам, составляюшим запрос (рис. 3-5).

Response Cache Cookies Output Рис. 3-5. Объект Response В таблице 3-8 перечислены свойства и методы объекта Response, дос туп к его подчиненным объектам.

Таблица 3-8. Свойства и методы объекта Response Имя Назначение Определяет, как сервер будет отклики перед отправкой их клиенту Cookies Задает содержимое файлов cookie, предназначенных для пересылки Output Чтение и запись неструктурированных данных, клиенту в виде отклика Следующий код создает cookie и посылает его клиенту в составе отклика.

Visual Basic Private Sub sender As e As Handles Этот код исполняется при первом отображении страницы, If Not IsPostBack Then Если браузер поддерживает If Then Dim As New - "Wombat" и добавить его к отклику.

Response. Cookies.

End If End If End Sub Visual private void Page_Load(object sender, e) { // Исполняется при первом отображении страницы // Если браузер поддерживает if { // HttpCookie new = // и добавить его к отклику.

i Занятие 3. Сохранение сведений о состоянии Из этого занятия вы узнаете, как сохранять данные Web-формы в промежутках между зап росами. В ASP.NET существует несколько механизмов сохранения данных кото рые применяются в зависимости от природы и области действия данных.

Изучив материал этого занятия, вы сможете:

подходящий способ сохранения передавать данные между с помощью строк запросов;

сохранять данные у клиента в виде cookies:

хранить страничные данные в свойстве View State сохранять значения переменных, объявленных на уровне приложения, в переменных и Session;

упорядочивать доступ к переменным состояния Application и Session во избежание ошибок при программировании.

Продолжительность занятия — около 30 минут.

Способы о состоянии Как вы знаете из главы 2, Web-формы создаются и уничтожаются при каждом запросе клиентского браузера. В силу этих особенностей значения переменных, объявленных в Web-форме, пропадают после ее отображения. В ASP.NET существуют различные сред ства сохранения переменных между запросами, позволяющие решить эту проблему:

строки — необходимы для передачи между запросами и откли ками в составе Web-адреса. Строки запросов видны поэтому в них нельзя передавать секретную информацию, например пароли;

• файлы cookie — применяются для хранения небольших порций информации на клиен тской машине. Клиент может отказаться от записи cookie, это нужно при написании кода;

состояние отображения — ASP.NET хранит элементы, записанные в страничное свой ство View в скрытых полях страницы;

переменные Session — требуются для хранения данных, локальных для теку щего сеанса (доступных единственному переменные состояния Application — применяются для хранения данных, которые долж ны быть доступны всем пользователям приложения.

Использование строк запросов Строки запросов позволяют пересылать вместе с адресом дополнительную В HTML-тэгах гиперссылок строка запроса следует после знака вопроса:

HREF= string Чтобы переслать строку запроса в коде, ее следует добавить к передаваемому методу Redirect. Ниже показан обработчик события функционально HTML-тэгу:

Visual Private Sub sender As e As EventArgs) Handles страницу еще раз с учетом строки запроса.

Serve aspx?

End Sub Visual void Button1_.Click(object System. e) Для извлечения строк запросов в коде применяется метод объекта Request.

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

Visual Basic sender As e As Handles Отобразить строку запроса.

Sub Visual private void sender, e) { // Отобразить строку запроса, Использование файлов cookie Файлы cookie применяются для хранения небольших данных на компьютере кли ента. Web-сайты часто обращаются к файлам cookie для хранения личных параметров и иной информации клиентов. Поскольку клиент может отказаться от cookie, перед попыт кой записи cookie важно убедиться, что это разрешено браузером.

Следующий код проверяет, ли браузер запись cookie, и если да, сохраняет личные параметры пользователя.

Visual Basic Private Sub Page_Load(ByVal sender As ByVal e As Hardies Этот код исполняется отображении страницы.

If Not Then Если браузер поддерживает файлы If создать Din cookUPrefs As New = "English" и добавить в отклик, End If If End Visual C# void sender, e) { // Этот код исполняется при первом отображении страницы, // Если поддерживает файлы { // cookUPrefs - new = "English";

// добавить в отклик.

код проверяет наличие файла cookie, и если проверка успешна, получает его.

Visual Basic Private Sub Page_Load(ByVal sender As e As Handles Этот код исполняется при первом отображении страницы.

If Not IsPostBack Если браузер поддерживает файлы If Then ' существует ли UPrefs.

If Not Then значение cookie.

= End If End If End If Sub Visual C# private void Page_Load(object e) // существует ли cookie UPrefs.

!= null) // Сохранить значение cookie.

Request. Value;

Использование состояния отображения Свойство ViewSiate служит для хранения данных в скрытых полях страницы. Поскольку ViewState сохраняет в странице, этот способ годится лишь для тех элементов, ко торые можно Для сохранения в ViewState более сложных элементов их при дется сначала преобразовать в строку, а после извлечения — вернуть в исходный вид.

Следующий код извлекает текст из текстового поля и помещает его в ячейки таблицы, расположенной на Поскольку нельзя хранить объекты непосредственно в свой стве процедура сначала сохраняет полученные строки в ViewSiate, а затем процедура Page Load создает на основе сохраненных текстовых строк элементы управления, таблицу.

Visual Basic Sub sender As e As Handles Записать текст в ViewState, Sub Private Sub sender As ByVal e As Handles Dim As Integer Для каждого элемента ViewState iCount = 0 To Dim As New Dim As New в ячейку.

Добавить ячейку в Добавить строку в таблицу.

Next End Sub • Visual private void e) { // Записать текст в ViewState.

ViewState.

private void sender, EventArgs e) { if // Для каждого элемента ViewState in { TableRow rowNew = new TableCell = // Записать текст в ячейку.

// в строку.

// Добавить строку в таблицу.

} :

кодирует скрытые страничные данные, поэтому пользователь не сможет про читать их из исходного текста страницы. Если, воспользовавшись предшествующим ко дом, добавить несколько элементов в таблицу, а после выбрать в меню браузера элемент Source (Вид\В виде HTML), скрытые поля будут выглядеть примерно Использование переменных состояния и Session Переменные состояния Application и Session необходимы для хранения данных, требуются на протяжении времени жизни приложения или отдельного сеанса соответ ственно. В переменных состояния Application и Session можно хранить данные любог о типа, включая объекты. Но учтите следующее, прежде чем пользоваться этим механизмом:

• переменные состояния Application и Session создаются «на лету», при этом не вы полня ются обычная проверка имени переменной и контроль типов. Следует ограничивать число точек доступа к этим переменным;

• обслуживание переменных состояния Session снижает производительность. Эти пере менные разрешается отключать на уровне приложения или страницы;

• переменные состояния Application доступны только в текущем процессе, доступ к ним из другого процесса невозможен. В случае масштабируемого приложения, работающе го на нескольких (или на многопроцессорном сервере), у каждого процесса этого приложения будет своя переменная состояния • область видимости переменных состояния Application определяется границами прило жения, заданными IIS, Упорядочение доступа к переменным состояния Переменные состояния Application и Session — мощное и потому опасное средство. Если использовать их бессистемно, простого наделать ошибок в коде, как часто бывало в старом Basic. Например, следующий код создает две переменных состояния Basic Visual C# = "Wombat":

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

Во избежание подобных проблем следует упорядочивать доступ к переменным состоя ния Application и Session. Проще всего сделать это следующим образом. Для каждого необ элемента данных объявляются переменные на уровне страницы, затем при ис полнении обработчика события в них записываются значения переменных со стояния и Session, а при исполнении обработчика события значе ния переменных, объявленных на уровне страницы, возвращаются в переменные состоя ния. Упорядоченное чтение и запись переменных состояния — полезный прием програм мирования, который рекомендуется взять на вооружение.

Следующий код иллюстрирует упорядоченный доступ к переменным состояния:

Visual Basic Public Class ' Объявить переменную на уровне страницы.

As String Private Sub sender As ByVal e As Handles Получить значение переменной Присвоить значение.

= "Wombat" Использовать переменную.

End Sub Sub sender As Object, ByVal e As Handles значение в переменную состояния, End Class Visual C# = private void sender, i II Проверить, существует ли переменная состояния.

null) // Получить значение переменной // Присвоить значение.

"Wombat";

// Использовать переменную, private void sender, System. EventArgs e) { // Вернуть значение в переменную состояния.

Внимание! В случае чем вызывать любые методы переменной состоя ния, например обязательно убедитесь, что ее значение отлично от null, иначе вы получите ошибку времени выполнения из-за пустой переменной состояния.

Отключение переменных состояния Session По умолчанию AS P. NET поддерживает переменную состояния для каждой цы приложения. Если странице не нужна сеансовая переменная состояния, то для повы шения производительности ее можно отключить.

Чтобы отключить переменную состояния Session для одной Web-формы:

• вызовите окно Web Form Properties для формы и установите как False.

Чтобы отключить переменные состояния Session во всем приложении:

• в файле установите для тега значение off:

используют пространства имен System. Web и System. Web. VI. Эти про странства имен определяют большинство объектов в том числе Page, и Response, открывающие доступ к большинству своих подчи ненных объектов, используемых в Web-приложении.

Поскольку срок обычных переменных, объявленных в Web-приложении, кра ток, необходимо сохранять их значения в промежутках между запросами. ASP.NET позволяет сохранять элементы данных в строке запросов, файлах cookie, состоянии отображения (в значении свойства View State), а также в переменных состоянии Session и Application.

Практикум 3. Работа с объектами и сохранение данных В этом практикуме вы создадите приложение Translator. Для этого потребуется сконстру ировать Web-форму и написать модуль Class. Вы создадите экземпляр объекта из модуля Global, затем сохраните новый объект в переменной состоянии State, которая наряду с состоянием отображения применяется в Web-форме. Готовое приложение выглядит так, как показано на рис. 3-6.

Продолжительность практикума — около 20 минут.

Translator 3-6. Готовое приложение Translator Упражнение Создание пользовательского интерфейса Сейчас вы создадите пользовательский интерфейс приложения, поместив на Web форму серверные элементы управления.

Создание нового проекта 1. Откройте новый проект ASP.NET Web application. В диалоговом окне New Project вве дите имя Translator и щелкните ОК.

2. В окне Properties переименуйте файл в Добавление элементов управления к пользовательскому интерфейсу Поместите на Web-форму серверные элементы управления, показанные на рис. 3-6, и за дайте для них свойства:

Имя элемента управления Свойство Значение Label 1 Надпись Text Universal Translator Font Bold, Large TextBoxl Текстовое поле [D Text Mode Multiline Кнопка ID Text Translate Упражнение 2. Создание класса Сейчас вы объявите класс с модификатором доступа Friend, заключающий в себе логику и данные приложения Translator.

Как создать класс 1. В меню Project выберите команду Add Class. Visual Studio откроет диалоговое окно Add New Item. Назовите класс и щелкните ОК.

2. В окне Code введите код:

Friend Class Private mstrText As String Private mstrOriginal As String Этот код управляет доступом к переменным, объявленным на уровне Public Property Text() As Get Text mstrText End Get Value As mstrText = Value Сохранить копию исходной строки для Restore.

mstrOriginal = Value End Set End Property Вернуть транслированный текст в исходный вид.

Public Sub mstrText = mstrOriginal End Sub Транслировать значение свойства Text.

Public Sub Dim As String, As Integer Dim As String Dim bCaps As Boolean 3 Работа с объектами и данных Преобразовать в массив при = 0 To Проверить, начинается ли слово с заглавной буквы.

If <> Then bCaps = = End If strWord = Выполнить трансляцию.

If strWord о strWord = - 1) & _ 1) & "ay" Сделать букву если нужно.

If bCaps strWord = & _ - 1) End If End If Записать слово обратно в массив.

= флаг заглавной буквы, bCaps = False Next Собрать строку из слов.

mstrText - arrWords) End Sub End Class Visual internal class string mstrText, // Этот код управляет доступом к объявленным // на уровне класса.

public string Text get { return } с - value:

Сохранить копию исходной строки для Restore, mstrOriginal = ;

// Вернуть транслированный текст в исходный вид.

public void { // Транслировать значение свойства Text.

public void { string strWord;

string[] - false;

// Преобразовать в массив при помощи // - ');

intCount - 0;

{ // Преобразовать в strWord = // Если первая буква - заглавная.

bCaps = true:

// Выполнить { strWord - 1) + + "ay";

первую заглавной, если нужно, strWord + - 1);

// Записать слово в массив.

= strWord;

// Сбросить флаг заглавной bCaps false;

с и = Упражнение 3. Сохранение объекта Translator в переменной состояния Session Сейчас вы добавите в файл код, инициализирующий переменную со стояния Session. Переменная состояния Session предназначена для хранения объек та используемого Web-формой.

Создание переменной состояния Session 1. Дважды файл Global.asax в окне Project, затем ссылку «Click Here То Switch To Code View».

2. Чтобы создать обработчик события введите в окне Code View следующий код:

Visual Basic Sub sender As e As EventArgs) Создать новый объект Dim TransClass As New Сохранить в переменной состояния Session.

= TransClass End Sub Visual C# protected void sender, EventArgs e) { // Создать новый класса TranslatorClass.

TranslatorClass TransClass - new TranslatorClassO;

// Сохранить объект в переменной состояния Session.

= TransClass;

Упражнение 4. Обработка событий Web-формы с помощью объекта TranslatorClass Сейчас вы добавите к Web-форме код, который позволит ей использовать объект сохраненный в переменной состояния Session. Кроме того, вы приме ните переменную типа хранимую в состоянии отображения страницы, для переключения режимов и Restore кнопки.

Как задействовать объект TransClass в обработчиках событий Web-формы 1. Откройте в окне Code модуль кода Web-формы.

2. Объявите на уровне модуля переменную-объект для получения объекта TransClass из переменной состояния Session.

Web-объектами Basic Dim TransClass As TranslatorClass TranslatorClass TransClass;

3. Чтобы присвоить значение переменной состояния Session только что объявленной пе ременной добавьте в обработчик события код:

Visual Basic Private Sub sender As ByVal e As Handles ' Получить объект TransClass из переменной состояния Session TransClass = End Sub Visual private void sender, e) // Убедиться, что переменная состояния Session существует.

null) // Получить объект TransClass из переменной состояния Session, TransClass 4. Добавьте в обработчик события следующий код:

Visual Basic Private Sub sender As ByVal e As Handles Объявить типа Boolean.

Dim bSwitch As Boolean Получить "переключателя" из ViewState и инвертировать его.

bSwitch = Not Сохранить новое значение в ViewState.

= bSwitch текст, в текстовом поле или зернуть его в исходный в зависимости от значения If bSwitch Then Получить текст.

= ' Транслировать текст.

' Показать текст.

= ' Поменять надпись на кнопке.

= "Restore" Else Вернуть текст в исходный вид.

Показать текст, Поменять надпись на кнопке.

"Translate" End If End Sub Visual private void sender, e) { // Объявить типа Boolean.

// что переменная ViewState существует.

// Получить значение "переключателя" из ViewState и // инвертировать его.

= !

else // Задать значение "переключателя".

bSwitch // Сохранить новое значение в ViewState.

= bSwitch;

// Транслировать текст, введенный в текстовом поле или вернуть // его висходный вид, в зависимости от значения (bSwitch) // Получить текст.

= // Транслировать текст.

TransClass.

// Показать текст.

= // Поменять надпись на кнопке.

= "Restore";

// Вернуть текст в исходный вид.

TransClass.

// Показать текст.

// Поменять надпись на кнопке.

butTranslate.Text = "Translate":

5. Запустите приложение и проверьте его работу.

Закрепление материала Приведенные ниже вопросы помогут вам лучше усвоить основные темы данной главы.

Если вы не сумеете ответить на вопрос, повторите материал соответствующего занятия.

Ответы для самопроверки — в приложении «Вопросы и ответы» в книги.

Каким образом упорядочены классы Framework?

2. Чем различаются модули класса и кода в Visual Basic 3. Как в Visual объявить метол, чтобы он был доступен без предварительного созда ния экземпляра этого класса?

4. Как вызвать член класса из производного класса?

5. Назовите четыре основных объекта, используемых при разработке 6. Куда следует поместить элементы данных: элемент управления, создавае мый во время выполнения;

объект, предоставляющий сервисы всем пользователям приложения;

личные настройки пользователя, чтобы сохранить их между запросами к Web-форме?

Создание пользовательского интерфейса Занятие Использование элементов управления Занятие 2. Проверка вводимых данных Занятие 3. Переход между формами В этой главе В этой главе рассказано, как конструировать пользовательский интерфейс для многостра ничных приложений Web Forms с помощью элементов управления ASP.NET, выбирать элементы управления, подходящие для решения различных задач, а также описаны раз личные виды разметки Web-форм. Кроме того, вы научитесь проверять правильность дан ных, введенных в элементы управления, и программировать переходы между Web-формами.

Прежде всего Для изучения материалов этой главы вам необходимо:

• знать основные элементы HTML;

• понимать жизненный Web-форм (он обсуждается во 2 главе).

интерфейса Занятие Использование элементов управления Элементы управления размешаются на Web-формах, они позволяют Web-формам решать задачи, для которых те предназначены, а также определяют внешний вид формы, позво ляют получать данные и выполняют различные действия от имени пользователя, В Microsoft Visual Studio предусмотрено два типа элементов управления, которые применяются с Web-формами, и два вида разметки самих Web-форм, с ними вы познако митесь, изучив материал этого занятия. Кроме того, вы узнаете, какие элементы управле ния необходимы для решения основных задач программирования.

Изучив материал этого занятия, вы сможете:

выбирать разметку Web-формы в зависимости от типа создаваемого приложения;

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

привязку элементов управления к элементам данных, например к переменным в приложении;

создавать шаблоны для сложных элементов управления, из повторяю щихся наборов других элементов управления;

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

получать файлы от клиента и сохранять их на сервере.

Продолжительность занятия — около 60 минут.

Выбор способа размещения элементов управления Разметка элементов управления на Web-форме бывает двух видов:

• сеточная (grid layout) — задана по умолчанию;

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

Такую разметку следует применять с приложениями в стиле Windows, когда элементы управления не длинными текстовыми фрагментами;

• потоковая (flow layout) — положение элементов управления определяется относительно других элементов управления, размешенных на странице ранее. Новые элементы уп равления, добавляемые во время выполнения, размещаются ниже тех, что добавлены перед этим. Такой способ размещения подходит для форм, где элементы управления чередуются с текстом.

Чтобы указать способ разметки страницы, предусмотрен следующий порядок действий.

В окне Design выберите нужную Web-форму.

2. Выберите объект в окне Properties.

3. Установите для свойства объекта DOCUMENT значение либо GridLayout.

Результат присваивания pageLayout различных значений показан на рис. 4-1. Значение GridLayout применяют для Web-форм с постоянным внешним видом, a FlowLayout — для Web-форм, которые содержат помимо элементов управления много текста, Форма с сеточной разметкой • Upload and View Files on Server Форма с потоковой разметкой •. -, - •• File Manager a Elf, type the ffle and enter of To s file, fee Click Рис. 4-1. Разные виды разметки Web-форм Если значение page Layout равно то при создании каждого элемен та управления Visual Studio добавляет к нему атрибуты стиля, которые задают его положе ние на странице полужирным шрифтом в определении формы):

Upload and View Files on Server

LEFT: 86px;

WIDTH: 347px;

POSITION: absolute;

TOP: 20px;

HEIGHT:

LEFT: 357px;

POSITION: absolute;

TOP;

103;

LEFT: 86px;

POSITION: absolute;

TOP:

104;

LEFT: 268px;

POSITION: absolute;

TOP:

23 106;

LEFT: 441px;

POSITION: absolute;

TOP:

Если же значение свойства равно Visual Studio не добавляет ат рибуты стиля. Элементы управления можно не только перетаскиванием их на форму, но и дважды щелкнув изображение нужного элемента на панели Toolbox. Исполь зование потоковой разметки упрощает создание форм, на которых элементы управления чередуются с особенно если потом эту форму приходится редактировать в виде File Manager

To create a new type the name of the file below click New.

To a file, select the file the list below and click Edit.

Click Delete to delete the selected file.

Выбор подходящего элемента С Web-формами применяются как HTML-элементы управления, так и серверные эле менты управления. В чем между ними? В сущности, серверные элементы уп равления — это надмножество управления, их особенности перечисле ны в таблице 4-1. Отличия серверных и управления Предмет Серверные элементы HTML-элементы управления События Генерируют на сервере события, Могут генерировать на сервере только на сервере для элемента страничные события управления отправку данных на.

Управление Данные, введенные в элемент Введенные в них данные не сохраня состоянием управления, сохраняются между ются;

их необходимо сохранять при запросами помощи страничных сценариев Приспособление Автоматически браузер Не способны автоматически к возможностям и выполняют рендеринг сабливаться к возможностям брау браузера в зависи мости от его зера. В случае при использо возможностей вании управления нужен код, определяющий либо при написании кода исходить из минимальных браузера Свойства Для каждого элемента управления Поддерживают только Framework атрибуты HTML набор свойств, изме нять внешний вид элемента управ ления и его поведение в серверном коде Но зачем нужен второй набор элементов управления со сходной функциональностью?

Всем стандартным элементам HTML соответствуют HTML-элементы управления, кото рые позволяют в большей степени контролировать поведение объектов на странице. При чины применения перечислены далее:

• переход с более ранних версий ASP. Прежние версии ASP поддерживали только ты HTML;

при использовании Studio можно не переписывать старые ASP- при ложения нуля», а постепенно обновить их ло ASP.NET. При загрузке проекта в Visual Studio элементы HTML преобразуются в HTML-элементы управления;

• не все элементы управления требуют серверной обработки и управления состоянием, осо бенно при использовании привязки данных. При каждом запросе к серверу элементы управления, связанные с данными, обновляются значениями из источника данных. По этому в таких случаях лучше применять HTML-элементы управления, а если зуются серверные элементы управления, с данными, — отключать для них управление состоянием;

• элементы управления HTML дают контроль над отображением. ASP.NET автома тически настраивает внешний вид серверных элементов управления в зависимости от возможностей запрашивающего браузера, а HTML-элементы управления не живают автоматическую настройку, поэтому ими управляют напрямую.

Как видите, серверные и HTML-элементы управления в большинстве случаев облада ют сходной функциональностью. Как правило, с серверными элементами ра ботать проще. В таблице 4-2 перечислены серверные и HTML-элементы управления, сгруппированные по видам задач программирования, которые они позволяют решать.

Таблица 4-2. Серверные и управления Задача Серверные элементы управления управления Отображение текста Box, Label, Text Field, Text Area, Password Field Отображение Table, DataGrid Table Выбор значения List Box, Dropdown из списка Repeater Исполнение Button, Link Button, Reset Button, mage Button Submit Button Установка значений CheckBox, CheckBoxList, Checkbox, Radio Button RadioButton, Отображение графики Image, Image Переходы Hyperlink Нет (для этого используется HTML-тэг <а>) Группировка элементов Panel, Placeholder Layout, Grid Layout управления Работа с датами Calendar Нет Демонстрация AdRotator Нет ных изображений Отображение горизон- Literal Horizontal Rule тальной линии Получение файлов Нет File Field от клиентов Сохранение данных, Обеспечивается механизмом Input Hidden введенных на странице управления состоянием Проверка вводимых Validator, Compare- Нет (для этого используются данных Validator, Regular- страничные сценарии) Validator, Validations В разделах рассматриваются основные задачи программирования, возни создании пользовательского интерфейса, и решаемые посредством элемен тов управления.

Работа с текстом Существует много способов отображения текста на странице. Текст, доступный только для чтения, можно записать прямо и объект Response, скажем, так: Write («Some Кроме того, для этого можно воспользоваться элементом управления Label или со свойством установленным в True;

наконец, для отображения текста применяют элемент управления Literal либо компонуют текст в виде HTML (как при ис пользовании метода Response.

Для отображения текста, доступного для редактирования, служит элемент управления TextBox, ключевые которого перечислены в таблице 4-3.

1 Использование * Таблица 4-3. Свойства элемента управления TextBox Имя Назначение Text Получение и установка значения текстового поля Отображение текста в одну или несколько строк (с прокруткой), а также пароля (Password). В последнем случае вместо вводимых символов отображаются точки Запрет на изменение отображаемого текста пользователем Если это свойство установлено в True, то, когда пользователь покидает текстовое поле, изменив содержимое, поле генерирует событие отправку страницы на сервер. По умолчанию это свойство установлено в False, поэтому событие кэшируется, пока не произойдет событие, вызывающее возврат страницы на сервер Чтобы познакомиться с текстовыми полями на практике, мы создадим входную стра Web-приложения.

Создайте новое с двумя Web-формами: и Webform2.

2. Разместите на Webforml элементы управления Label, TextBox, Button и задайте их свой ства, как показано в следующей таблице:

Элемент Свойство Значение Label 1 Text LabeI2 Text Password:

Text Box Password Text Mode Password В Litton 1 ID Text OK 3. Добавьте к обработчику события следующий код:

Visual Basic Private Sub As e As Handles If = "Guest" And = "Moondog" Then Else End If End Sub Visual C# private void sender, e) { if == "Guest") (txtPassword.Text == else = 4. Запустите приложение. Если ввести имя пользователя и пароль, прописанные в коде, приложение покажет форму (рис. 4-2). Заметьте, что в результате присвое ния свойству этого поля значения Password вместо вводимых в него символов отображаются точки.

хранить пароли и пользовательские имена в тексте программы не реко мендуется, в главе 8 рассказывается, как сохранять и извлекать пароли из серверных файлов.

Работа с таблицами и списками Элементы управления Label и TextBox отображают текст единым блоком. Для отображе ния текста в виде списков и таблиц следует воспользоваться из элементов управле ния, перечисленных в таблице 4-4. управления ListBox, DropDownList и Table служат для отображения простых динамических таблиц и списков, a DataGrid, и Repeater — для более сложных таблиц и списков, содержащих другие элементы управле ния и связанных с данными, Рис. 4-2. и Webform Таблица 4-4. Элементы управления, списки и таблицы Имя Назначение ListBox Отображение неизменяемого текста в виде простого списка с прокруткой DropDownList Отображение неизменяемого текста в виде простого раскрывающегося списка Table Отображение текста и элементов управления в виде таблицы. Позволяет динамически создавать таблицы в коде при наборов и Отображение текста и элементов управления в виде таблицы;

внешний вид этого элемента контролируется шаблонами. DataGrid обладает встроенными возможностями форматирования, сортировки и постраничного просмчтра данных DataList Отображение текстовых строк и элементов управления с использованием шаблона, задающего их внешний вид. Обладает возможнос тями форматирования и выбора списка Repeater Отображение строк, составленных из различных элементов управлении, внешний вид которых контролируется шаблоном. Встроенные DataGrid и DataList, отсутствуют Добавление элементов к спискам и таблицам во время разработки К элементам управления ListBox, DropDownList и Table можно добавлять статические эле менты данных на этапе разработки. Это делается средствами диалогового окна Collection Editor, показанного на рис. 4-3.

Height NotSet NotSet Width I Рис. 4-3.

6- Для этого нужно выполнить одно из действий:

• чтобы добавить постоянный элемент к или DropDownList, выберите в окне Properties свойство Items и кнопку рядом с надписью (Collection);

• чтобы добавить постоянный элемент к Table, выберите в окне Properties свойство Rows и щелкните кнопку рядом с надписью (Collection).

Добавление элементов в список таблицу во время выполнения Для добавления элементов к списку во время выполнения используется метод Add набора Items, принадлежащего элементу управления. Например, следующий код добавляет к эле ментам управления и DropDownList данные, введенные в текстовое поле:

Visual Basic Private Sub sender As e As Handles but List Box 1. Add End Sub Visual C# И ListBox, и DropDownList автоматически сохраняют элементы, добавленные к ним во время выполнения. В отличие от них, управления Table автоматически сохраняет только те данные, которые были записаны в ячейки во время разработки при помощи Collection Editor. Чтобы добавить строки или ячейки к во время выполнения, необ заново создать на основе данных, сохраненных в переменной состояния.

Ниже показан код, отображающий в ячейках таблицы элементы, которые пользователь вводит в текстовое поле Каждый щелчок кнопки Add строку к Visual Basic Private sender ByVal e As Записать текст в состояние отображения страницы.

Построить таблицу заново.

End Sub Private Sub RebuildTableO As Integer As Dim As Для каждой строки, сохраненной в состоянии = 0 То - создать новую строку Dim As New взять строку из ViewState разбить строку и поместить в массив = Для каждого элемента = 0 То создать новую ячейку Dim As New записать в ячейку текст...добавить ячейку к строке.

New) Next строку к таблице.

Next End Sub Visual C# sender, e) { // Записать текст в состояние страницы, private void RebuildTableO string[] arrWords;

string TableRow rowNew:

TableCell celNew;

// Для каждой for (int iCountl 0:

iCount1++) strSep = // Create a new table row.

rowNew = new TableRow();

// взять из strWords = // разбить строку и результаты в массив.

= // Для каждого элемента = 0;

<= { // создать ячейку, = new // записать текст в ячейку, // добавить ячейку к строке таблицы.

} //...добавить строку к таблице.

Получение выбранного элемента списка Для получения выбранного элемента списка его свойство Selected Например, следующий код отображает выбранный элемент списка в надписи на по верхности Web-формы:

Basic Private Sub sender As e As Проверить, ли элемент списка.

If Not Отобразить выбранный Labell.Text = "The item is:

& Else Labell.Text - "No item is End If End Sub Visual private void Page_Load(object e) { /I Проверить, выбран ли какой-нибудь элемент if == null) Labell.Text = "No item is else // Отобразить выбранный = "The selected is: + Свойство возвращает объект, поэтому перед использованием значения это го свойства непременно убедитесь, что он сушествует.

Использование простого связывания данных со списками В приложениях значения элементов управления можно получать из любого источника дан ных. Таким источником могут быть любые открытые данные — таблицы базы массивы, свойства объектов или выражения, объединяющие несколько элементов. В про стейшем варианте привязка данных позволяет легко тов управления ListBox и расположенных на Чтобы увидеть, как работает привязка данных, действия 1. Создайте Web-форму и добавьте к ней элемент управления DropDownList и следую щий код:

Visual Basic Открытый элемент данных для DropDownList.

Public arrData As - "that", "and", "the", Private Sub sender As e As Handles Связать с данными элементы управления на этой странице.

Sub Visual C# public string[] "that", "and", "the", private void sender, } 2. Выберите элемент управления DropDownList и щелкните в окне Properties кнопку свой ства — Visual Studio откроет диалоговое окно показанное на рис. 4-4. Оно служит для загрузки данных из любых открытых источников в элементы управления, отображающие списки и таблицы.

3. Из списка Properties выберите свойство установите переключатель в позицию Custom Expression и введите в текстовое поле для выражений с гроку arrData. После запуска приложения в раскрывающемся списке DropDownList зятся элементы массива arrData (рис. 4-5).

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

Рис. Диалоговое окно Рис. 4-5. Привязка списка к массиву Чтобы отключить управление состоянием для серверного элемента управления, уста новите его свойство в Добавление элементов к DataList и Repeater Для добавления элементов к DataGrid, и Repeater используется привязка данных.

Внешний вид этих элементов управления во время выполнения определяется шаблонами.

(template) — это набор серверных или HTML-элементов элементов управления (либо тех и других вместе), составляющих элементы данных в DataGrid, DataList или Repeater.

Чтобы добавить элемент данных к DataList или Repeater, выполните с. [едую щие действия.

Определите источник данных.

2. Поместите на форму элемент управления DataGrid, DataList или Repeater и его с источником данных.

3. Задайте набор серверных или HTML-элементов управления, отредак тировав шаблон элемента управления.

4. Установите свойства серверных элементов управления, в списке таб лице, чтобы привязать их к источнику данных, связанному с их контейнером.

В следующем примере показано, как добавить к элементу управления DataGrid столб цы шаблона и привязать элементы управления из этих столбцов к простым источникам данных.

1. Создайте в приложении открытый источник данных, как это делалось предыдущих примерах. Код, показанный ниже, создает массив для демонстрации простого источника данных:

Visual Basic Открытый элемент данных для DataGrid, Public arrData As "that", Visual C# // элемент данных для DataGrid.

public string[] arrData - new "that", "and", "the", 2. Поместите на поверхность элемент управления DataGrid.

3. Добавьте к DataGrid столбцы шаблона. Для этого выберите его и щелкните ссылку Property Builder, расположенную пол списком свойств в окне Properties, — Visual Studio откроет диалоговое окно Properties (рис. 4-6).

т Рис. 4-6. Диалоговое окно Properties 4. Чтобы добавить столбец шаблона к элементу управления DataGrid, в диалоговом окне Properties щелкните Columns, в списке Columns пункт Template Column и кнопку Add (>), В этом примере вы должны добавить два шаблона.

Щелкните ОК.

5. В окне Properties выберите свойство и задайте источник данных для Data Grid. В нашем примере нужно ввести т. е. имя массива, созданного на этапе 1.

6. Создайте шаблон, который будет для отображения данных в DataGrid.

Для этого DataGrid правой кнопкой и выберите из контекстного меню ко манду Edit — элемент управления перейдет в режим редактирова ния, как показано на рис. 4-7.

• Рис, 4-7. Добавление элементов к DataGrid Чтобы добавить к DataGrid элементы управления, поместите их на и пере тащите на шаблон. В этом примере нужно добавить текстовое поле и перетащить его на столбец 0.

В окне Properties выберите свойство для элемента управления, только что добавленного к шаблону, и щелкните появившуюся кнопку, В результате Visual Studio покажет диалоговое окно 4-8).

9 В списке выберите свойство, которое станет получателем данных. В нашем случае ~ Text. Установите переключатель в положение Simple Binding. Щелкни те Container, затем — чтобы задать элемент данных, помещаемый в указан ное свойство. Щелкните ОК, чтобы закрыть диалоговое окно DataBinding.

10. Отредактируйте второй столбец шаблона. Для этого щелкните правой кнопкой эле мент управления DataGrid и выберите из контекстного меню команду Edit Temp late\Column(l).

11. Повторите этапы с 4 по 7, чтобы отредактировать столбец Поместите на форму элемент управления Button и перетащите его на столбец шаблона в DataGrid.

12. Закончив, закройте шаблон. Для эгого шаблон правой кнопкой и выберите из контекстного меню команду End Template Editing. После этого Visual Studio покажет элементы управления, вложенные в DataGrid (рис. 4-9). Любое свойство вложенных элементов управления можно изменить, шаблон, как показано выше.

type • - (Unbound) S Container • ffi Of - Column!

-M Font Гь Height Readonly as --: Width Рис. 4-8. Диалоговое окно Рис. 4-9. Элементы управления, связанные с данными Исполнение команд Серверные элементы управления Button, и генерируют события, инициирующие возврат страницы на сервер (события postback) для исполнения команд.

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

Чтобы наглядно продемонстрировать порядок генерации событий на странице, поме стите на Web-форму элементы управления TextBox, ListBox, Button и добавьте к ней сле дующий код:

Visual Basic Private Sub Page_Load(ByVal As ByVal e As Handles При первой загрузке страницы список, If Not IsPostBack Then End If End Sub Private Sub sender As ByVal e As Handles End Sub Private sender As ByVal e As Handles End Sub Private Sub sender As ByVal e As Handles End Visual C# private void Page_Load(object sender, e) // При первой страницы заполнить список.

if } ;

void sender, e) !

private void sender, e) { } private void sender, System. e) { } Если запустить этот код, отобразит сведения о событиях в порядке гене (рис. 4-10). Обработчик события Click исполняется последним из всех ков, генерированных MB E* Button Рис. 4-10. Порядок событий Как видите, в использовании обработчиков события элементов управления Button и нет ничего особого, В отличие от них элемент управления ImageButton пре доставляет ряд дополнительных возможностей. Аргумент обработчика события Click этого элемента управления содержит координаты точки (X и в которой щелк нул этот элемент управления. Реакция изображения зависит от того, где его пользователь (рис. 4-11). Графический элемент, реагирующий на события подобным об разом, называется картой изображения (image clicked on Рис. 4-11, Элемент управления Следующий код использует аргументы е.Х и e.Y элемента управления что позволяет определить, по какому кругу кнопки (рис. пришелся щелчок пользователя.

Visual Sub sender e As Handles Dim yOffset, X, Radius As Single As String ' Вычислить расстояние от до точки щелчка на основе ' аргументов X и Y.

xOffset - / yOffset = / X = - xOffset) Y = - yOffset) Radius = 2) + (Y Создать строку сообщения.

Select Case Case 0 To strMessage "on circle."

Case 22 To strMessage = "on second circle."

Case 43 To strMessage - "on third circle."

Case 65 To strMessage - "on Case Else strMessage - "outside of End Select Показать = "You & End Sub Visual private void sender, { double X, Y, Radius:

string // Вычислить расстояние от центра до щелчка на аргументов X Y.

xOffset = / 2;

yOffset = / 2;

X = - xOffset);

Y = - yOffset);

Radius = 2) + // Создать строку сообщения, if (Radius < 22) { strMessage - "on center ;

else if >= 22) (Radius <= { = "on second else if > 42) (Radius <= { strMessage = third J eise if > 64) (Radius <= { strMessage = fourth } else { strMessage - "outside of }.

Показать сообщение, Labell.Text - "You + strMessage;

Получение и установка значений Для получения от пользователя булевых значений применяются элементы управления RadioButton, Button и Подобно и DropDownList, элементы управления RadioButtonList и CheckBoxList можно заполнить элементами при инструмента Collection Editor. Для этого у выбранного элемента управ ления свойство Items, чтобы вызвать Collection Editor.

Для получения значений элементов управления CheckBox и используется их свойство Checked. Например, следующий код проверяет, установлен ли флажок Check Box 1:

Visual Basic Private Sub sender As System. Object, As Handles is & Visual C# private void e) is + В отличие от элементов управления OptionButton из Windows-форм, элемент Radio Button не может автоматически взаимодействовать с аналогичными элементами управле размещенными на той же форме. Чтобы элементы управления RadioButton взаимо действовали, задайте для каждого из них одинаковое значение свойства GroupName. На рис. 4-12 показаны три элемента управления RadioButton с одинаковыми значениями свойства GroupName. В результате при установке одного из этих переключателей осталь ные сбрасываются.

Г Low У этих элементов значение свойства GroupName совпадает Рис. 4-12. Сгруппированные элементы управления RadioButton Для получения и установки значений элементов управления или ButtonList используется цикл For Each, который проверяет все элементы из Вопреки ожиданиям, элемент управления CheckBoxList содержит не (a — не Вместо них CheckBoxList и RadioButtonList жат элементы управления ListControl. Состояние ListControl можно определить посред ством свойства Selected, как показано ниже:

Visual Basic Private sender As e As Handles Dim As Each In Items If Then & is End If Next End C# private void sender, e) { in { + is Отображение графики и графической рекламы Графику можно отображать на Web-форме по-разному:

• как фон, заполняющий всю страницу (при помощи свойства Background либо ее часть (при помощи свойства элемента управления • на переднем плане — при помощи элемента управления Image;

• на кнопке — при помощи элемента управления так отображаются эле менты, реагирующие на действия пользователя (см. пример в предыдущем разделе);

• как рекламное изображение — при помощи элемента управления AdRotator, поочередно показывает картинки рекламного содержания, определенные в списке.

Элементы AdRotator, помимо содержат гиперссылки на Web-сайт рекла модателя.

Элемент управления Image сам не реагирует на действия но динамически отображать графические элементы в зависимости от действий, выполнен ных над другими элементами управления. Чтобы показать изображение при эле мента управления Image во время выполнения, воспользуйтесь его свойством следующий код в ответ на щелчок кнопки показывает картинку с видом Visual Basic Private Sub As e As System. Handles = Sub C# private void sender, e) { = } Графику часто используют в целях — рекламных в Интернете хранится в файлах формата GIF. Элемент управления AdRotator применяется в Visual Studio для подобной рекламы. Для управления демонстрацией рек ламных изображений AdRotator использует XML-файл, где хранятся изображения и страницы, на который попадет щелкнувший изображение, а также сведе ния о приоритете и прочие свойства рекламных изображений. Во время выполнения AdRotator выбирает изображение из списка XML-файла и показывает его на странице.

Чтобы воспользоваться элементом управления AdRotator, выполните следующие дей ствия.

Поместите на Web-форму элемент управления AdRotator.

2. к проекту XML-файл и откройте его.

3. В окне Properties выберите свойство затем выберите из ся списка значение AdRotator Schedule File. В результате Visual Studio добавит в XML файл следующие строки:

4. В секции добавьте для каждого рекламного изображения тег.

5. Сохраните XML-файл и вернитесь к в окне Design.

6. Выберите элемент управления AdRotator и поместите в свойство File имя только что созданного XML-файла.

Теперь нужно отредактировать XML-файл, чтобы AdRotator удалось отобразить нуж ную информацию. Например, следующий XML-файл показывает два рекламных изобра жения:

Click to visit rd> tutorials and Теги, схему XML элемента управления AdRotator, описаны в таблице 4-5.

Таблица 4-5. Схема AdRotator Тег Значение Открывает описание рекламного изображения адрес рекламного изображения Адрес страницы, на которую попадет пользователь, щелкнувший рекламное изображение Текст подсказки, появляющейся, когда пользователь указатель мыши на изображение. Этот текст также появляется на месте изображения, если оно не доступно по адресу и не может быть показано Название категории для фильтрации показываемых изображений Число, представляющее вероятность показа;

чем оно больше, тем отображается соответствующее изображение Группировка элементов управления Элементы управления группируют, чтобы получить возможность манипулировать в коде отдельными областями Web-формы. Таким образом, удается выделить отдель ную область Web-формы для обслуживания входа пользователя в систему, а после успеш ного входа — отключить или вовсе скрыть эту панель.

Элементы управления, размещенные на Web-форме, группируют при элемен та управления Panel (панель). Применение Panel с Web-формами отличается от примене ния одноименного элемента управления с Windows-формами. Во-первых, на Panel нельзя размещать элементы управления прямо;

сначала нужно поместить их на Web форму и лишь потом перетащить на Panel. Во-вторых, элемент управления Panel из Web Forms использует потоковую разметку. Это означает, что разместить элемент в определенном месте поверхности Panel нельзя.

Примечание Чтобы заставить элементы управления взаимодействовать, не обязательно размещать их на одной панели;

достаточно задать для них одинаковое свойства (подробнее об этом — в разделе и установка Чтобы поместить элемент управления на поверхности элемента управления вы полните следующие действия.

I. Разместите на Web-форме необходимые элементы управления.

2. элементы управления на поверхность Panel в том порядке, в каком они должны отображаться;

при этом Visual Studio располагает их на панели один за другим.

3. При символов перевода каретки и пробелов поместите элементы управления в нужном месте формы.

рис. 4-13 показана группа элементов управления, составляющая входную страницу Web-сайта. После входа пользователя панель становится скрытой (см. код ниже), а вместо нее отображается приветственное сообщение.

Рис. 4-13. Размещение элементов управления на панели Этот код скрывает панель после входа пользователя на сайт:

Visual Basic Private Sub As e As Если имя и пароль введены скрыть панель и показать сообщение.

If "Guest" = "Wombat" - False - "Welcome & txtName.Text Else = End If End Sub Visual C# private void sender, e) { Если имя и пароль введены верно, скрыть панель и показать сообщение.

if == "Guest") == = False;

"Welcome + txtName.Text;

!

else = Получение дат Для получения и отображения дат используется элемент управления Calendar (календарь).

Его внешний вид контролируется его свойствами, показанными на рис.

Для получения и установки дат, заданных при Calendar, используется обра ботчик события а также свойства и Dates. Событие инициирует возврат страницы на сервер, поэтому код о гобра жает выбранную дату (или даты) сразу же после их установки:

3/2/ > 27 29 30 31 3 A 5 6 7 В 12 14 15 17 20 21 22 4-14. Свойства элемента управления Calendar Private Sub sender As e As Handles После загрузки страницы показать в надписи дату.

интерфейса Глава & Private sender As e As If = 1 Then одна дата, ее в надписи.

= "Selected & Else несколько дат, показать их, IblDate.Text = "Selected & to & _ - 1) If Visual C# private void e) { Показать сегодняшнее число, IblDate.Text = date:

Показать сегодняшнее число.

= "Current date: + 1) // Если выбрана её.

IblDate.Text = "Selected Gate: + else // Если выбрано несколько дат, их.

IblDate.Text = "Selected + + to + Получение файлов от клиента Для загрузки файлов с клиента на сервер служит HTML-элемент управления File Field. На самом деле он состоит из связанных HTML-элементов управления Text и Submit Button. кнопки Browse запускает встроенный отображающий на кли ентском компьютере диалоговое окно выбора файла (рис. 4-15).

Upload and View Files on Server Рис. 4-15. Диалоговое окно Чтобы загрузить на сервер выбранный файл с клиента, выполните следующие действия.

1. Перетащите на Web-форму элемент управления File Field.

2. Щелкните его правой кнопкой и выберите из контекстного меню команду Run Server Control.

3. Щелкните правой кнопкой и выберите команду HTM Source — Visual Studio покажет эту Web-форму в виде HTML.

4. Добавьте к тегу в HTML-тексте формы атрибут Этот атрибут устанав ливает тип формы. Для загрузки файла быть установлена как -data, а атрибут — как post (см. выде ленный полужирным шрифтом в следующем примере):

5. Щелкните правой кнопкой и выберите из контекстного меню команду View Design — Visual Studio откроет дизайнер Web-формы.

6. Добавьте к Web-форме элемент управления Button и обработчик события Click, кото рые позволят получить и сохранить выбранный файл. Например, следующий обработ чик события сохраняет файл на сервере:

Visual Basic Private Sub sender As _ e As Handles Dim As ' Разбить полное имя файла на части, strFiiename = ' Сохранить закачанный файл на сервере с использованием интерфейса Глава ' полученного имени.

& & Добавить файл к списку серверных файлов, Items.

Выбрать первый элемент списка.

= End Sub Visual C# private void sender, e) :

// Получить полное имя файла.

string = // Получить имя файла.

strFilename // Сохранить закачанный файл на с использованием // полученного имени.

+ + // Добавить файл к списку серверных файлов.

// Выбрать первый элемент списка.

0;

!

Метол PostedFile HTML-элемента управления File Field представляет закачиваемый файл. Этот метод возвращает объект, свойство FileName и метод которого позволя ют сохранить файл на сервере (см. пример выше). Следующий код демонстрирует один из способов получения файла с сервера;

в этом случае полученный файл отображается в бра узере.

Visual Basic Private Sub sender As e As Handles Dim strFilename As String Получить имя выбранного файла.

strFilename ' Отобразить файл как Web-страницу.

& & strFilename) End Sub 1 Использование Visual C# private void sender, e) // имя выбранного файла.

string = // файл как Web-страницу.

+ + } Занятие 2. Проверка вводимых данных Один из важнейших этапов получения данных от пользователя — их проверка. Критерии проверки могут быть разными: вводились ли данные верен ли их тип (например, действительно ли введенная строка является номером телефона), находятся ли они в пре делах допустимого диапазона.

В ASP.NET есть особые элементы управления — верификаторы (validation controls), позволяющие перед использованием введенных данных проверять их раз личным критериям. На этом занятии рассказано, как применять верификаторы для выяв ления недопустимых данных и оказания пользователю в устранении ошибок.

Изучив материал этого занятия, вы сможете:

объяснить, как ASP.NET проверяет правильность вводимых данных и почему проверка выполняется как на клиентской, так и на серверной стороне;

проверять данные, вводимые в текстовое поле, на соответствие одному или нескольким критериям;

отображать сообщения, которые пользователю исправить ошибки, им при вводе данных па Web-форме;

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

создавать собственные критерии для проверки вводимых данных на серверной, клиентской или на обеих Продолжительность занятия — около 40 минут.

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

Таблица 4-6. ASP.NET Имя Проверяет наличие данных в элементе управления Validator Проверяет, ли данные с данными, введенными в другой элемент управления Проверяет, находится ли введенный данных в заданном диапазоне Проверяет, соответствует ли формат введенных данных заданному Проверяет правильность вводимых данных при помощи серверного или клиентского сценария (либо того и другого) Централизованно отображает сообщения об ошибках при вводе данных или краткое описание ошибки Проверка вводимых данных на стороне клиента поддерживается посредством JScript которую клиент загружает отдельно. Несмотря на доста точно широкую поддержку используемая этой библиотекой объектная модель до кумента (Document Object Model, DOM) доступна только в Microsoft Internet Explorer 4.0 и выше. В связи с этим верификаторы поддерживают автоматическую проверку не только на клиентской, но и на серверной стороне. Проверка на серверной стороне выполняется всегда, независимо от результатов проверки на клиентской стороне. Такого рода двойной контроль обеспечивает корректность нестандартной проверки и не позволяет обойти про верку на стороне клиента.

Верификаторы проверяют значения серверных элементов управления, заданных их свойством В 4-6 описаны шесть верификаторов.

Чтобы использовать верификаторы, выполните следующие действия.

Поместите верификатор на Web-форму и занесите в его ControlToValidate имя проверяемого им элемента управления (в случае Compare Validator следует также опре делить свойство 2. Введите в свойство верификатора текст сообщения об ошибке, отобража емого при вводе неверных элемент управления, проверяемый верификатором.

3. Если помимо об ошибке, заданного свойством ErrorMessage, нужно зить дополнительное сообщение, занесите его текст в свойство Text. Это позволит крат ко указать, в каком месте формы возникла ошибка, а также показать более подробное описание ошибки при использовании свойства ErrorMessage элемента управления 4. Поместите на форму элемент управления ValidationSummary — это позволит зованно отображать об ошибках, генерируемые всеми 5. Добавьте элемент управления, генерирующий событие, который вызывает возврат стра ницы на сервер. Хотя проверка вводимых данных должна осуществляться на стороне клиента, она не выполняется, пока не будет возврат страницы.

На рис. как выполняется простая проверка данных, вводимых на Web форме.

: • • Simple Validation Рис. 4-16. Проверка данных, вводимых на Web-форме На рис. показана проверка с применением элемента управления Sum mary. Заметьте, что на рис. 4-16 значения свойства Text отображаются у каждого верифи катора, а при использовании элемента управления Summary все сообщения об ошибках поступают в его свойство ErrorMessage и централизованно отображаются на форме.

Summary Validation Рис. 4-17, Использование элемента об ошибках, генерируемые при проверке вводимых данных, можно ото бражать и в диалоговом окне (рис. 4-18), для этого установите свойство эле мента управления ValidationSummary в True.

Summary, Рис. 4-18. окно Validation Комбинирование верификаторов С элементом управления может быть связано несколько верификаторов. На пример, для текстового поля, предназначенного для ввода телефонного номера 4 19), нужно проверять не только наличие значения, но и правильность формата введенных таким образом, в этом случае требуются верификатора.

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

Например, все верификаторы за исключением Require Validator приравнивают от сутствие введенного значения к вводу правильного значения. Таким образом, генериру ются одни сообщения при отсутствии введенных данных (это проверяет RequireFieldVali dator) и другие, если введенное значение находится вне допустимого диапазона или имеет неверный формат. Пример с полем для ввода телефонного номера показан на рис. 4-19.

Рис. 4-19. Использование нескольких верификаторов В 4-7 перечислены правила преобразования данных, принятые элементом уп равления Таблица 4-7. Правила проверки, применяемые CompareValidator Ситуация Результат Значение элемента управления, заданного свойством Значение не может быть преобразовано недопустимо в подходящий тип данных Значение элемента управления, заданного свойством Значение не может быть преобразовано допустимо в подходящий тип данных Глава В последнем случае из таблицы 4-7 необходимо отдельно проверять данные, вводимые в элемент управления, заданный свойством чтобы гарантировать ввод в него допустимых данных.

Отмена проверки введенных данных Поскольку введенные данные проверяются перед обработкой страницы пользо ватель может попасть в ловушку при проверке, если не предусмотрен способ отменить проверку, не возвращая страницу на сервер.

Для отмены проверки введенных данных необходим управления Sub mit, устанавливающий атрибут в false (см. строку, выделенную полу шрифтом в следующем HTML):

114;

LEFT;

386px;

WIDTH: 62px;

absolute;

TOP: 130px;

HEIGHT:

Этот HTML-текст определяет кнопку, которая отменяет проверку и возвращает стра ницу на сервер. Проверив свойство IsValid объекта Page при обработке события можно определить, что проверка прервана пользователем. В этом случае необходимо за ново проверить страницу, поскольку при отмене проверки свойство получает зна чение True. код позволяет узнать, отменил ли пользователь проверку:

Visual Basic Private Sub sender As e As Handles Проверить страницу, если пользователь отменил проверку на клиенте.

If IsPostBack Then Page.

Проверить, допустимы ли на странице данные.

If Not Then ' Пользователь отменил операцию, вернуться на страницу по End If End Sub Visual private void sender, e) { // Проверить страницу, если пользователь отменил проверку на клиенте.

{ Page. ValidateO;

if // отменил операцию.

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

Серверный код, выполняющий верификацию, помещают в обработчик события Server Validate, аргументы которого дают доступ к проверяемому элементу управления. Показан ный ниже обработчик проверяет, является ли введенное число простым:

Visual Basic Этот код проверяет, является ли введенное число Private Sub (ByVal source As args As Handles Try Dim As Integer Получить из ControlToValidate в args) iPrime = For iCount = 2 To iPrime \ Если число без оно не простым - вернуть False.

If iPrime iCount - 0 Then False Return End If Next ' Это число, вернуть True Return Catch ex As Если при синтаксическом возникла ошибка, вернуть False.

= False Return End Try End Sub private void source, try // Получить значение из ControlToValidate // как args), int iPrime (int iCount = 2;

iCount <= (iPrime 2);

{ // Если число делится без остатка, // оно не является - вернуть False.

% == 0) !

IsValid = false;

return;

} // Это простое число, вернуть True.

= true;

return;

e) !

// Если при синтаксическом разборе возникла ошибка, вернуть False, = false;

return;

!

i Для проверки вводимых данных на клиентской стороне определите сце нарий в свойстве Client Validation элемента управления Custom Validator. Проверка на клиентской стороне но если она используется, клиентский и серверный проверяющий код должны быть идентичными. сценарий является клиентс кой версией предыдущего серверного кода:

VBScript Sub arguments) For - 2 To \ Если число делится без остатка, оно не является простым - вернуть False.

If Mod iCount - = False Exit Sub If Next = True End Sub

© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.