19 сентября 2019 года    
Четверг | 23:45    
Главная
 Новости
Базы данных
Безопасность PC
Всё о компьютерах
Графика и дизайн
Интернет-технологии
Мобильные устройства
Операционные системы
Программирование
Программы
Связь
Сети
 Документация
Статьи
Самоучители
 Общение
Форум







Разделы / Базы данных / MS SQL Server

Компоненты контроля ввода ASP.Net

Компоненты контроля ввода ASP.Net

Компоненты контроля ввода ASP.Net

Идея контролировать ввод пользователя программного обеспечения (ПО) в зависимости от типа данных или по шаблону не нова и была реализована во многих программных продуктах. Не обошла вниманием эту идею и компания Microsoft в новой версии ASP (ASP.Net), представив нам шесть компонент для контроля ввода пользователя (ККВ)

Omnia vita in aperta leviora sunt.
(Обнаруживший себя изъян наименее опасен.)

Доверяй, но проверяй.
Поговорка

Идея контролировать ввод пользователя программного обеспечения (ПО) в зависимости от типа данных или по шаблону наверняка возникла у разработчиков ПО вместе с первыми ошибками ввода и была реализована во многих программных продуктах. Например, в Turbo Vision фирмы Borland класс TinputLine имеет метод Valid, перекрыв который можно вести контроль правильности ввода данных. При работе с базами данных есть возможность задать так называемые constraints - ограничения на ввод на уровне, например, поля (столбца) или таблицы. Так, в СУБД MS SQL Server 2000 имеются такие типы ограничений на ввод на уровне поля (домена в терминах SQL Server), как DEFAULT - значение по умолчанию, CHECK - проверка значения на допустимость занесения в поле и REFERENTIAL - значение должно соответствовать одному из значений в другой таблице. Эти примеры являются разными способами реализации контроля ввода пользователя, служащие одной цели - повышению надежности работы программного обеспечения. Наверняка именно поэтому не обошла вниманием эту идею и компания Microsoft в новой версии ASP - ASP.Net, представив нам шесть компонент для контроля ввода пользователя (ККВ). Рассмотрим их более подробно.

Обзор компонент контроля ввода

Прежде всего, нужно отметить, что набор этих компонент доступен в пространстве имен System.Web.UI.WebControls, относится к ASP Web Controls и включает следующие ККВ:

  • RequiredFieldValidator - проверяет, есть ли в поле ввода хоть какое-нибудь значение;
  • RegularExpressionValidator - проверяет значение в поле ввода на соответствие шаблону;
  • CompareValidator - проверяет, является ли значение в поле ввода приемлемым относительно к данному значению или содержимому другого элемента управления;
  • RangeValidator - проверяет, входит ли значение в поле ввода в заданный диапазон;
  • CustomValidator - позволяет разработать пользовательские компоненты контроля ввода;
  • ValidationSummary - выводит отчет обо всех возникших ошибках.

    Все ККВ, кроме RequiredFieldValidator, допускают пустое значение поля ввода. А поскольку к полю ввода можно присоединить более одного ККВ, то необходим как минимум один компонент RequiredFieldValidator для избежания ввода пустого значения. Например, можно использовать RequiredFieldValidator и RegularExpressionValidator для того, чтобы убедиться, что поле ввода не является пустым и соответствует данному шаблону.

    Компоненты контроля ввода выполнены в виде классов, т. е. имеют поля, свойства и методы. Некоторые свойства и методы являются общими для всех ККВ (кроме ValidationSummary):

  • ErrorMessage - при возникновении ошибки система отображает значение этого свойства в месте расположения самого ККВ;
  • Display - ККВ невидим до тех пор, пока не возникнет ошибка ввода. В случае ошибки ввода система генерирует сообщение о ней, отображая ее на экране одним из трех способов:
    - display="none" - сообщение ErrorMessage не отображается в области размещения ККВ, вместо этого сообщение будет отображено в общем отчете об ошибках (ValidationSummary);
    - display="dynamic" - в случае ошибки ввода ErrorMessage отображается на новой странице;
    - display="static" - изначально программист выделяет на странице достаточное место для отображения ErrorMessage путем выделения для ККВ определенного пространства, где и отображается значение свойства ErrorMessage при возникновении ошибки ввода.
  • Validate - метод, программно осуществляющий проверку значения в поле ввода и обновляющий свойство IsValid.

    Компонент RequiredFieldValidator

    Этот компонент используется для того, чтобы установить необходимость ввода в ассоциированное поле ввода какого-нибудь значения. Чаще всего изначальное значение поля ввода является пустым, и данный ККВ контролирует ввод непустых значений. Однако, задав значение свойства InitialValue данного ККВ, можно изменить значение по умолчанию. В любом случае, ввод будет считаться неудачным, если после потери фокуса (или отправки формы на сервер) значение в поле ввода не будет отличаться от InitialValue.

    В следующем примере пользователь должен будет ввести свою фамилию, имя и отчество в поле Ф.И.О. Если это значение не будет введено, то после нажатия кнопки Подтвердить, система отобразит сообщение об ошибке. Заметьте, что мы не пишем никакого дополнительного кода для осуществления этой проверки. После нажатия на кнопку Подтвердить форма отсылается на сервер, который и производит автоматический контроль правильности ввода (см. пример).

    Использование ККВ RequiredFieldValidator
    
    <!-RequiredFieldValidator-->
    <html>
    <head></head>
    <title>Пример использования ККВ RequiredFieldValidator</title>
    <body>
    <form id="v1" runat="server"><br>
    <h3>Введите Ваше Ф.И.О.:</h3><br>
    <asp:TextBox id="tbFIO" rows="1" width="75" runat="server"/>
    <asp:RequiredFieldValidator id="rfvFIO" ControlToValidate="tbFIO"
    ErrorMessage="Необходимо ввести Вашу фамилию, имя и отчество"
    display="static" runat="server"/><br>
    <asp:Button id="btnOk" text="Подтвердить" runat="server"/>
    </form>
    </body>
    </html>
    
    

    Компонент RegularExpressionValidator

    Компонент RegularExpressionValidator обычно используется для проверки введенного значения на соответствие шаблону ввода. То есть, пользуясь этим компонентом, можно контролировать правильность ввода электронных почтовых адресов, индексов, телефонов и т. п. Для примера добавим к предыдущему коду поле для ввода года рождения и определим, что значение этого поля может иметь только четыре цифры. Для этого введем дополнительное поле ввода tbYear и добавим к нему ККВ RegularExpressionValidator с шаблоном "\d{4}". Шаблон вынудит систему сгенерировать ошибку, если пользователь введет число, число цифр в котором не будет равно четырем.

    Использование ККВ RegularExpressionValidator
    
    <!-RegularExpressionValidator-->
    <html>
    <head></head>
    <title>Пример использования ККВ RegularExpressionValidator</title>
    <body>
    <form id="v1" runat="server"><br>
    <h3>Введите Ваше Ф.И.О.:</h3><br>
    <asp:TextBox id="tbFIO" rows="1" width="75" runat="server"/>
    <asp:RequiredFieldValidator id="rfvFIO" ControlToValidate="tbFIO"
    ErrorMessage="Необходимо ввести Вашу фамилию, имя и отчество"
    display="static" runat="server"/><br>
    <h3>Год Вашего рождения:</h3><br>
    <asp:TextBox id="tbYear" rows="1" width="75" runat="server"/><br>
    <asp:RequiredFieldValidator id="rfvYear" ControlToValidate="tbYear"
    ErrorMessage="Необходимо ввести год Вашего рождения"
    display="static" runat="server"/><br>
    <asp:RegularExpressionValidator id="revYear" ControlToValidate="tbYear"
    ErrorMessage="Необходимо ввести 4 цифры года, например 1972"
    validationExpression="\d{4}"
    display="static" runat="server"/><br>
    <asp:Button id="btnOk" text="Подтвердить" runat="server"/>
    </form>
    </body>
    </html>
    
    

    Если мы хотим позволить пользователю вводить год рождения как в виде четырех, та и в виде двух цифр, то можно изменить шаблон на "\d{2,4}", хотя необходимо помнить, что в этом случае возникает возможность ввода значения, содержащего 3 цифры. Дополнительную информацию по шаблонам можно получить на сайте.

    Компонент CompareValidator

    Данный ККВ обычно используется для сравнения введенного значения с указанным, со значением в другом элементе ввода, с некоторой постоянной, а также для проверки типа введенного значения. Допустим, нам необходимо узнать рост человека, заполняющего нашу анкету. Как известно, рост в большинстве случаев измеряется в метрах и не является целым числом. Поэтому добавим поле для ввода tbH и ККВ cvH с проверкой введенного значения на тип "double" к нашему примеру:

    Использование ККВ CompareValidator
    
    <!-CompareValidator-->
    <html>
    <head></head>
    <title>Пример использования ККВ CompareValidator</title>
    <body>
    <form id="v1" runat="server"><br>
    <h3>Введите Ваше Ф.И.О.:</h3><br>
    <asp:TextBox id="tbFIO" rows="1" width="75" runat="server"/>
    <asp:RequiredFieldValidator id="rfvFIO" ControlToValidate="tbFIO"
    ErrorMessage="Необходимо ввести Вашу фамилию, имя и отчество"
    display="static" runat="server"/><br>
    <h3>Год Вашего рождения:</h3><br>
    <asp:TextBox id="tbYear" rows="1" width="75" runat="server"/><br>
    <asp:RequiredFieldValidator id="rfvYear" ControlToValidate="tbYear"
    ErrorMessage="Необходимо ввести год Вашего рождения"
    display="static" runat="server"/><br>
    <asp:RegularExpressionValidator id="revYear" ControlToValidate="tbYear"
    ErrorMessage="Необходимо ввести 4 цифры года, например 1972"
    validationExpression="\d{4,4}"
    display="static" runat="server"/><br>
    <h3>Ваш рост (м)</h3><br>
    <asp:TextBox id="tbH" rows="1" width="75" runat="server"/>
    <asp:CompareValidator id="cvH" type="double" operator="DataTypeCheck"
    ErrorMessage="Необходимо ввести рост в виде 1,75" ControlToValidate="tbH"
    display="static" runat="server"/><br>
    <asp:Button id="btnOk" text="Подтвердить" runat="server"/>
    </form>
    </body>
    </html>
    
    

    Однако необходимо учесть тот факт, что любое значение, способное конвертироваться в тип double, будет принято. То есть, например, при вводе роста 2000 м никакого сообщения об ошибке не будет. Впрочем, комбинируя различные значения свойств ККВ CompareValidator, можно добиться более четкого контроля над вводом пользователя. Эти свойства могут принимать следующие значения:

    Таблица 1. Значения свойств ККВ CompareValidator
    Свойство Перечень значений
    type String, Integer, Double, DateTime, Currency
    operator Equal, NotEqual, GreaterThan, LessThan, GreaterThanEqual, LessThanEqual, DataTypeCheck

    Замечу, что для того, чтобы сверять введенное значение со значением в другом поле ввода, необходимо присвоить имя этого поля ввода свойству ControlToCompare. А для того, чтобы сравнить введенное значение с некоторой постоянной, необходимо указать эту постоянную в свойстве ValueToCompare. Одновременно пользоваться двумя этими условиями проверки не рекомендуется.

    Компонент RangeValidator

    Этот компонент поможет нам убедиться в том, что введенное значение находится в определенном диапазоне. Типы данных, которые могут использоваться в сравнении: String, Integer, Double, Date, Currency. Воспользовавшись указанной выше возможностью использования нескольких ККВ для одного и того же поля ввода, добавим код для контроля введенного роста от 0 до 2,5 метров:

    Использование ККВ RangeValidator
    
    <!-RangeValidator-->
    <html>
    <head></head>
    <title>Пример использования ККВ RangeValidator</title>
    <body>
    <…>
    <Часть кода опущена. Смотрите в предыдущих примерах>
    <…>
    <h3>Ваш рост (м)</h3><br>
    <asp:TextBox id="tbH" rows="1" width="75" runat="server"/>
    <asp:CompareValidator id="cvH" type="double" operator="DataTypeCheck"
    ErrorMessage="Необходимо ввести рост в виде 1,75" ControlToValidate="tbH"
    display="static" runat="server"/><br>
    <asp:RangeValidator id="rvH"
    ErrorMessage="Рост должен быть в диапазоне от 0 до 2,5 м" ControlToValidate="tbH"
    type="double" minimumValue="0" maximumValue="2,5"
    display="static" runat="server"/><br>
    <asp:Button id="btnOk" text="Подтвердить" runat="server"/>
    
    

    Компонент CustomValidator

    Случается, что функциональности существующих ККВ не достаточно для того, чтобы проверить значение на соответствие некоему сложному условию. Именно тогда нам на помощь придет компонент CustomValidator, с помощью которого можно использовать собственные функции проверки соответствия значения заданному условию, вернув в качестве результата true или false. В качестве примера разработаем компоненту, проверяющую значение в поле ввода tbEducation на "высшее" или "среднее".

    Использование ККВ CustomValidator
    
    <!-CustomValidator-->
    <html>
    <head></head>
    <title>Пример использования ККВ CustomValidator</title>
    <body>
    <…>
    <Часть кода опущена. Смотрите в предыдущих примерах.>
    <…>
    <asp:RangeValidator id="rvH"
    ErrorMessage="Рост должен быть в диапазоне от 0 до 2,5 м" ControlToValidate="tbH"
    type="double" minimumValue="0" maximumValue="2,5"
    display="static" runat="server"/><br>
    <h3>Образование :</h3>
    <asp:TextBox id="tbEducation" rows="1" width="125" runat="server"/>
    <asp:CustomValidator id="cvEducation" ControlToValidate="tbEducation"
    ErrorMessage="Образование должно быть средним или высшим" onServerValidate="subValidEduc"
    display="static" runat="server"/><br>
    <asp:Button id="btnOk" text="Подтвердить" runat="server"/>
    </form>
    </body>
    </html>
    
    <script language="VB" runat="server">
    sub subValidEduc(s as object, e as ServerValidateEventArgs)
    if (e.value="высшее") or (e.value="среднее") then
    e.IsValid = true
    else
    e.IsValid = false
    end if
    
    end sub
    </script>
    
    

    Не смотря на то, что в данном примере демонстрируется контроль ввода на стороне сервера (что видно по тегу <script language="VB" runat="server">, а также из onServerValidate="subValidEduc"), ASP.Net автоматически формирует и клиентский скрипт проверки ввода на языке Javascript для всех ККВ. Скрипт этот можно увидеть, просмотрев исходный код одной из полученных в результате наших экспериментов html-страничек. Автоматической генерации скрипта можно избежать путем изменения различных настроек, однако по умолчанию эта опция включена. Отсюда следует, что до тех пор, пока на клиенте не будут внесены все значения правильно, форма отослана на сервер не будет. Можно пойти и другим путем, явно указав в свойстве ClientValidationFunction имя функции-валидатора на стороне клиента, однако в этом случае ее придется написать самому на языке Javascript.

    Компонент ValidatonSummary

    Этот компонент позволяет нам отображать все ошибки в отведенном для этого конкретном месте. Если быть точным, то отображаются значения свойства ErrorMessage указанных ККВ в общем отчете об ошибках ввода. Для того чтобы сообщения об ошибках не дублировались самими ККВ, нужно поставить звездочку <*> или какое-нибудь короткое сообщение сразу после начального тЕга ККВ.

    Основные свойства компонента ValidationSummary:

  • HeaderText - заголовок области отображения ошибок;
  • DisplayMode - настойка отображения ошибок:
    - BulletList (по умолчанию) - список с маркерами;
    - List - немаркированый список;
    - SingleParagraph - в строчку;
  • ShowSummary - это свойство используется для программного контроля над отображением или скрытием отчета об ошибках. Может принимать значения true или false;
  • ShowMessageBox - позволяет отобразить отчет об ошибках в окне сообщений. Для того чтобы воспользоваться этой возможностью, данное свойство нужно установить в "true", а свойство ShowSummary - в "false".

    Использование компонента Validation Summary
    
    <!--ValidationSummary-->
    <html>
    <head></head>
    <title>Пример использования ValidationSummary</title>
    <body>
    <form id="v1" runat="server"><br>
    <h3>Введите Ваше Ф.И.О.:</h3>
    <asp:TextBox id="tbFIO" rows="1" width="75" runat="server"/>
    <asp:RequiredFieldValidator id="rfvFIO" ControlToValidate="tbFIO"
    ErrorMessage="Необходимо ввести Вашу фамилию, имя и отчество"
    display="static" runat="server">*</asp:RequiredFieldValidator>
    <br>
    <h3>Год Вашего рождения:</h3>
    <asp:TextBox id="tbYear" rows="1" width="75" runat="server"/><br>
    <asp:RequiredFieldValidator id="rfvYear" ControlToValidate="tbYear"
    ErrorMessage="Необходимо ввести год Вашего рождения"
    display="static" runat="server">Будьте внимательны при вводе</asp:RequiredFieldValidator>
    
    <asp:RegularExpressionValidator id="revYear" ControlToValidate="tbYear"
    ErrorMessage="Необходимо ввести 4 цифры года, например 1972"
    validationExpression="\d{4,4}"
    display="static" runat="server">*</asp:RegularExpressionValidator>
    <br>
    <asp:Button id="btnOk" text="Подтвердить" runat="server"/>
    <br><br>
    <asp:ValidationSummary id="valSummary"
    headerText="Обратите внимание на ошибки ввода и исправьте их:"
    showSummary="true"
    display="static" runat="server"/>
    </form>
    </body>
    </html>

    
    

    Заключение

    Мы рассмотрели шесть компонент, относящиеся к ASP.Net Web Controls и позволяющие программисту держать под контролем ввод пользователя, заблаговременно предупреждая его об ошибках. Заметим еще раз, что ККВ по умолчанию генерируют код как на стороне сервера, так и на стороне клиента. Также необходимо отметить как положительный факт то, что, несмотря на разнообразие функциональности готовых компонент, разработчиками была предусмотрена возможность написания пользовательских ККВ. В целом же можно сказать, что набор компонент с именно такой функциональностью далеко не случаен и, безусловно, послужит написанию безопасных приложений, отсекающих массу ошибок еще на стадии ввода.

    Виталий Чужа
  • Компоненты контроля ввода ASP.Net
    Лента новостей


    2006 (c) Copyright Hardline.ru