Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПвИ / Конспект лекций.doc
Скачиваний:
267
Добавлен:
01.06.2015
Размер:
1.05 Mб
Скачать

Лекция 12. Проверяющие элементы управления

Шесть проверяющих элементов управления (validation controls или validators), определенных в пространстве имен System.Web.UI.WebControls, предназначены для проверки данных, вводимых пользователем в Web-формы. Проверяющие элементы управления ASP.NET интеллектуальны, они выполняют проверки как на клиенте, так и на сервере, генерируют код JavaScript, который исполняется браузером и не позволяет возвращать форму, содержащую неверные данные. Когда возврат формы произошел, они снова проверяют введенные данные на сервере.

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

Рассмотрим виды проверок, которые способны выполнять проверяющие элементы управле­ния:

  • заполнение поля ввода (RequiredFieldValidator);

  • введенное значение находится в заданном диапазоне (RangeValidator);

  • введенная строка соответствует регулярному выражению (RegularExpressionValidator);

  • введенное значение равно, не равно, меньше, меньше или равно, больше или больше или равно заданному значению или другому введенному значению (CompareValidator).

Если ни одна из этих проверок не годится, можно задать собствен­ные процедуры, задействовав элемент управления CustomValidator. Эле­мент управления ValidationSummary позволяет отображать совместно сообщения об ошибках, обнаруженных другими проверяющими элементами управления.

Следует иметь в виду один нюанс поведения проверяющих элементов управ­ления: генерируемый ими клиентский код проверки работает не во всех браузе­рах. Применяемый для этой цели JavaScript-код интенсивно использует DHTML-модель объектов документа (DOM) браузера. Прежде чем W3C стандартизовал DOM, в Internet Explorer и Netscape Navigator были реализованы несовместимые DOM. Проверка на клиентской стороне работает в Internet Explorer 4 и более поздних. ASP.NET определяет тип браузера и даже не пытается генерировать клиентский код проверки для Navigator.

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

Использование проверяющих элементов управления

Все проверяющие элементы управления, кроме ValidationSummary, имеют общий базовый класс BaseValidator и, таким образом, имеют ряд общих характеристик:

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

  • Все имеют свойство ErrorMessage, которое содержит сообщение, отображаемое в том случае, когда проверяющий элемент управления зафиксировал ошибку. Место на Web-странице, где появляется это сообщение, зависит от того, где на странице находится проверяющий элемент управления. Если, например, он справа от элемента управления TextBox, то и сообщение также появится спра­ва от TextBox.

  • Все имеют свойство ForeColor, указывающее цвет сообщений об ошибке; по умолчанию — красный.

  • Все имеют свойство Display, указывающее способ отображения сообщения ошибке. Оно может иметь значение Static, когда место для сообщения резервируется на Web-странице статически; Dynamic, когда место на странице не резервируется (а значит, внешний вид страницы может измениться при срабатывании проверяющего элемента управления); None, когда сообщение об ошибке не отображается совсем. Последнее используется для отображения сводки сообщений об ошибках в элементе управления ValidationSummary.

  • Все имеют свойство EnableClientScript, позволяющее выборочно включать/отключать проверки на клиентской стороне. По умолчанию свойство установлено в true. Если задано false, элемент управления не генерирует клиентский сценарий на JavaScript и, таким образом, отключает проверки на клиенте. Проверки на сервере выполняются в любом случае.

Ниже приведен простой пример использования некоторых из этих свойств. Следующий код объявляет TextBox и присоединяет к нему RequiredFieldValidator. Также задается сообщение, отображаемое при обнаружении ошибки проверяю­щим элементом управления, на странице резервируется место для отображения текста сообщения (по возможности не допуская изменения взаиморасположения элементов страницы при отображении сообщения) и устанавливается голубой цвет для вывода текста сообщения:

<asp:TextBox ID="Password" TextMode="Password" RunAt="server" />

<asp:RequiredFieldValidator

ControlToValidate="Password"

ErrorMessage="Required field"

Display="static"

ForeColor="blue"

RunAt="server" />

Можно не указывать атрибут ErrorMessage и поместить сообщение об ошибке между начальным и завершающими тэгами проверяющего элемента управления:

<asp: RequiredFieldValidator

ControlToValidate="Password"

Display="static"

ForeColor="blue"

RunAt="server" >

Required Field </asp: RequiredFieldValidator>

Недостаток задания сообщения об ошибке, таким образом, в том, что его нельзя будет использовать элементами управления ValidationSummary. Достоинство – возможность создания «красивых» сообщений об ошибках с использованием HTML-тегов.

Проверяющий элемент управления может быть присоединен только к одному элементу управления, однако количество проверяющих элементов управления на странице не ограничено. Кроме того, к одному элементу управления может быть присоединено несколько проверяющих элементов управления. Ниже RequiredFieldValidator и RegularExpressioriValidator совместно проверяют, что пароль не пуст и содержит не менее 8 символов:

<asp:TextBox ID="Password" TextMode="Password" RunAt="server" />

<asp:RequiredFieldValidator

ControlToValidate="Password"

ErrorMessage="Required field"

Display="dynamic"

ForeColor="blue"

RunAt="server" />

<asp: RegularExpressionValidator

ControlToValidate="Password"

ValidationExpression=". {8, }"

ErrorMessage="You must enter at least 8 characters"

Display="dynamic"

ForeColor="blue"

RunAt="server" />

RequiredFieldValidator здесь может показаться лишним, так как RegularExpressionValidator все равно проверяет, что TextBox содержит не менее 8 символов. Однако RegularExpressionValidator не проверяет незаполненные поля. Это справедливо и для других проверяющих элементов управления.

Замечание: в предыдущем примере свойство Display проверяющих элементов управления установлено в Dynamic, а не в Static. Если написать Display=«static», то сообщение об ошибке RegularExpressionValidator будет отображаться далеко справа от TextBox, так как пространство непосредственно справа от него зарезер­вировано для сообщения от RequiredFieldValidator. Display=«dynamic» не позволя­ет ни одному из элементов управления захватить место, которое может понадо­биться другому, и таким образом обеспечивает вывод обоих сообщений в одном и тот же месте.

Соседние файлы в папке ПвИ