Валидация – это процесс проверки данных на соответствие различным критериям. При разработке любого приложения в большинстве случаев разработчику приходится иметь дело с обработкой данных, которые ввел пользователь в соответствующие поля на форме. По разным причинам пользователь может вводить некорректные данные. Например, в поле "Возраст" он по ошибке может указать отрицательное или вовсе нечисловое значение. На практике встречается множество ситуаций, где определенные поля в пользовательском интерфейсе могут содержать только те данные, которые строго соответствуют определенным шаблонам. Если не учитывать подобные ситуации, то в процессе работы приложения могут возникать сбои, связанные с некорректным вводом пользователя. Ошибки могут быть допущены случайно или намеренно. В последнем случае пользователь может вводить некорректные данные с целью вывести приложение из строя и таким образом произвести атаку на приложение. Поэтому каждое приложение, которое работает с данными, которые вводит пользователь (а таких приложений большинство) должно производить предварительную проверку корректности введенных данных. Именно по этой причине каждый разработчик должен быть знаком с механизмом валидации данных, которые указал пользователь.
Исторически, механизмы валидации данных разрабатывались самими разработчиками прикладных приложений. Это означает, что при каждой обработке запроса логике обработки запроса предшествовало большое количество условных операторов, определяющих условия корректности данных. Примером такого подхода может являться следующий фрагмент кода.
Приведенный фрагмент кода является лишь небольшой демонстрацией того, насколько громоздким может быть код валидации данных. Тем не менее, приведенный выше пример является упрощенной демонстрацией того, как может выглядеть подобный код. Как видно при относительно малом количестве проверяемых параметров, создается большое количество кода. В реальных условиях эти проверки обычно сложнее, а параметров больше.
Поскольку подобный подход вносит множество программного кода в процесс обработки запроса и ухудшает читаемость программы, платформа ASP.NET содержит ряд механизмов для выполнения валидации в виде отдельных программных компонентов.
Существует два вида валидации данных, введенных пользователем.
Клиентская валидация производится в бразуере на стороне клиента. Как правило, логика валидации на стороне клиента реализуется посредством сценариев JavaScript, которые запускаются внутри браузера. Клиентская валидация обычно содержит несложные алгоритмы проверки. Это происходит в силу того, что клиентский код физически не может обратиться к серверным ресурсам (например, к базе данных). Поэтому на стороне клиента проверяются самые тривиальные сценарии (такие как проверка длины строки, проверка на вхождение в диапазон и т.д.).
Клиентская валидация может отсутствовать в приложении. Однако, если сценарии валидации присутствуют на стороне клиента, это может избавить от необходимости лишних обращений к серверу в случае невыполнения простых условий проверки.
Серверная валидация работает в рамках программного кода, размещенного на стороне сервера. Здесь проверяются всевозможные случаи, в том числе те, которые уже были проверены на стороне клиента. Кроме тривиальных проверок, на стороне сервера могут работать более сложные алгоритмы. Необходимость дублирования проверки сценариев, которые уже были проверены на стороне клиента, обусловлена тем, что клиентские проверки могут не сработать, если в браузере у клиента отключено исполнение сценариев JavaScript. Другими словами наличие клиентской валидации не может гарантировать успешную проверку определенных там ограничений.
Общий алгоритм валидации данных, введенных пользователем можно представить следующим образом.
Таким образом, серверная валидация – это необходимый процесс, который должен выполнятся всякий раз, когда обрабатывается пользовательский ввод, а клиентская валидация – это опциональный компонент, который позволяет избавить пользователя от необходимости лишних обращений к серверу и повысить удобство работы с приложением.
Большинство приложений так или иначе обрабатывает данные, которые вводит пользователь на странице. Пользователь может случайно или намеренно вводить некорректные данные. Поэтому требуется проверка пользовательского ввода при обработке запроса. Процесс проверки данных, введенных пользователем называется валидацией. Существует два типа валидации – серверная и клиентская. Серверная валидация производит всевозможные проверки и является основным механизмом валидации. Клиентская валидация позволяет обрабатывать алгоритмы валидации более интерактивно (на стороне клиента) и таким образом делает использование веб-приложения более удобным.
При разработке приложений на базе ASP.NET Web Forms валидация данных, введенных пользователем, осуществляется при помощи специальных элементов управления – валидаторов. Валидаторы полностью реализуют логику проверки достоверности введенных пользователем данных. Каждый валидатор проверяет одно атомарное условие. Если требуется определить более сложную логику проверки, то на странице использует несколько валидаторов одновременно.
Процесс проверки достоверности данных в рамках приложения на базе ASP.NET Web Forms выглядит следующим образом:
Postback) на одной из ранних стадий жизненного цикла страницы происходит вызов метода страницы Validate;Validate. Перебор осуществляется на основе содержимого коллекции Controls, которая присутствует в классе страницы и дочерних элементов управления. Результат выполнения данного метода будет передан в логическое свойство IsValid валидатора, которое присутствует в составе каждого валидатора;Validate просматриваются свойства IsValid у каждого из валидатора и устанавливается свойство страницы IsValid. При этом если хотя бы один из валидаторов имеет отрицательное значение свойства IsValid, то значение свойства страницы IsValid также устанавливается в отрицательное значение (false). Если значения свойства IsValid у всех положительное (true), то значение этого свойства страницы также устанавливается в соответствующее состояние.Таким образом, для того, чтобы убедиться, правильно ли введены значения в полях, необходимо проверить значение свойства страницы IsValid.
Приведенная выше последовательность проверки достоверности данных описывает процесс серверной валидации. Все стандартные валидаторы, присутствующие в составе ASP.NET также содержат клиентскую логику. Это означает, что разработчику не нужно заботиться о клиентской валидации – она уже реализована в валидаторах.
Существует несколько разновидностей валидаторов, которые можно использовать при разработке приложения. Поскольку каждый валидатор является элементом управления ASP.NET Web Forms, то каждый валидатор является наследником класса "BaseValidator". Базовый класс валидатора отличается от обычного элемента управления наличием следующих элементов:
свойство ControlToValidate |
определяет элемент управления, с которым связан текущий валидатор. Именно значение этого элемента управления будет проверять валидатор; |
свойство EnableClientScript |
позволяет включать и отключать клиентскую валидацию. По умолчанию клиентская валидация включена (значение свойство равно "true"); |
свойство ErrorMessage |
определяет сообщение об ошибке, которое будет отображаться на странице, если проверка закончилась неуспехом; |
свойство IsValid |
определят состояние валидатора. Основываясь на значении этого свойства можно определить, успешно ли прошел процесс проверки; |
метод Validate |
запускает процесс валидации. |
В составе ASP.NET Web Forms доступны следующие элементы управления для проверки пользовательского ввода:
RequiredFieldValidator;RangeValidator;CompareValidator;RegularExpressionValidator;CustomValidator.Элемент управления RequiredFieldValidator позволяет проверить ввел ли пользователь данные в поле ввода или нет. Если поле ввода не содержит данных, то процесс проверки данных завершается неуспехом. Для использования этого типа валидаторов необходимо разместить его на форме и в свойстве ControlToValidate указать имя элемента управления, значение которого должно проверяться.
Элемент управления RangeValidator позволяет проверить значение поля ввода на заданный диапазон. Для задания границ диапазона используются свойства MinimumValue и MaximumValue. При этом объект RangeValidator способен работать с различными типами данных. Для этого существует поле Type, которое может принимать следующие значения:
String (строка);Integer (целое число);Double (число с плавающей точкой);Date (дата/время);Currency (валюта).
Элемент управления CompareValidator позволяет сравнивать значение одного элемента управления с константой или значением другого элемента управления. Для задания значения для сравнения используются свойства ValueToCompare (для сравнения с константой) или ControlToCompare (для сравнения с другим элементом управления). При этом может быть задано только одно из указанных свойств.
Свойство Operator позволяет задать операцию сравнения. Среди списка операций есть такие как равно, не равно, больше, больше или равно, меньше и др. Кроме того, это поле может содержать специальный тип операции – DataTypeCheck. Такая операция позволяет убедиться, что в указанном элементе управления содержатся данные указанного типа, при этом тип данных задается в свойстве Type.
Следующий фрагмент кода демонстрирует проверку содержимого поля ввода на неравенство значению "0".
Элемент управления CustomValidator позволяет задать собственный алгоритм валидации. Такой подход может быть полезен тогда, когда представленные выше сценарии не удовлетворяют потребностям. При этом можно выполнить свой собственный код для осуществления валидации.
Для задания алгоритма валидации на серверной стороне необходимо подписаться на событие ServerValidate. В обработчике этого события можно реализовать свой собственный механизм валидации. При этом параметр "args" позволяет получить доступ к значению элемента управления (args.Value), а также задать результат валидации (args.IsValid). Кроме того, существует возможность задания клиентской валидации. Для этого свойству ClientValidationFunction необходимо задать имя JavaScript-функции, в которой реализован алгоритм валидации, при этом данная функция должна быть доступна в рамках данной страницы.
Следующий фрагмент кода демонстрирует проверку содержимого поля ввода используя собственный алгоритм валидации. Для этого на страницу добавляется соответствующий валидатор, для которого определяется обработчик.
Обработчик события валидации может выглядеть следующим образом.
Как видно, валидация закончится успехом, если длина строки в поле ввода будет больше или равна 20. Аналогичным образом можно определить собственную логику проверки значения.
В составе элементов для валидации существует также дополнительный элемент управления ValidationSummary. Этот элемент управления не выполняет проверку достоверности введенных данных. Вместо этого он позволяет отобразить итоговую информацию по всем ошибкам на странице (отобразить списком все ошибки на странице). В итоговой информации выводится значение ErrorMessage каждого валидатора, для которого эта проверка закончилась неудачей.
Таким образом, валидация введенных пользователем данных в рамках приложения на базе ASP.NET Web Forms осуществляется посредством специальных элементов управления, называемых валидаторами.
Проверка достоверности введенных пользователем данных в рамках приложений на базе ASP.NET Web Forms осуществляется путем использования специальных элементов управления (валидаторов) в составе формы. Каждый валидатор позволяет проверить вводимое значение на соответствие одному правилу. Можно использовать несколько валидаторов в рамках одной формы. Валидаторы ASP.NET Web Forms реализуют сценарии клиентской и серверной валидации.
Поскольку платформа ASP.NET MVC Framework предлагает модель разработки, отличную от ASP.NET Web Forms, использование элементов управления становится невозможным. Поскольку валидаторы ASP.NET – это элементы управления, содержащие логику проверки значений, этот способ применять в приложениях на базе ASP.NET Web Forms нельзя. Поэтому при разработке приложений на основе ASP.NET MVC Framework предлагается иной подход.
Процесс валидации ASP.NET MVC Framework заключается в следующем. При обработке действия контроллера, контроллер определяет какие именно значения не являются корректными и почему. После этого контроллер агрегирует информацию об ошибках, которая впоследствии передается представлению. Представление в процессе генерации пользовательского интерфейса имеет возможность сообщить пользователю об ошибках на странице.
Для хранения информации об ошибках в базовом классе контроллера определен объект ModelState. Используя этот объект, контроллер имеет возможность передать представлению информацию об ошибках на странице.
Если при обработке запроса контроллер обнаруживает ошибку, он должен вызвать метод AddModelError объекта ModelState, в котором указать имя поля, содержащее ошибку и комментарии, которые должны отобразиться пользователю. После выполнения проверки корректности значений для всех параметров, контроллер должен проверить свойство IsValid объекта ModelState. Если объект ModelState содержит хотя бы одно сообщение об ошибке, свойство IsValid будет принимать значение "false"; в противном случае свойство "IsValid" примет значение "true".
Предположим, что требуется разработать приложение, которое создает запись в базе данных. Предварительно следует проверить пользовательский ввод. В этом случае программный код действия контроллера будет выглядеть следующим образом.
Как видно из приведенного фрагмента кода, логика обработки запроса не выполняется, если страница содержит хотя бы одну ошибку.
Для отображения информации об ошибке в рамках представления используются вспомогательные методы ValidationMessage и ValidationSummary.
Метод ValidationSummary отображает полный список ошибок, которые допустил пользователь при вводе информации. Данный метод не содержит параметров и использует объект ModelState для получения информации об ошибках на странице.
Если в какой-то части страницы требуется отобразить информацию об ошибке для конкретного поля, то следует воспользоваться методом ValidationMessage. Этот метод принимает в качестве параметра имя поля, для которого необходимо отобразить информацию об ошибке. Имя определяется при добавлении информации об ошибке в объект ModelState посредством метода AddModelError. Первый параметр метода AddModelError содержит это имя. Если при вызове метода ValidationMessage больше никаких параметров не задано, то в качестве сообщения об ошибке будет использоваться сообщение, заданное при вызове метода AddModelError объекта ModelState. Можно явно указать сообщение об ошибке при вызове метода ValidationMessage, определив его во втором параметре этого метода.
Логика работы метода ValidationMessage определена следующим образом. Если для поля, для которого вызывается этот метод есть информация об ошибке в объекте ModelState, то в месте вызова метода ValidationMessage появляется информация об ошибке; если поле не содержит ошибок (объект ModelState не содежит информации об ошибках для этого поля), то в месте вызова метода ValidationMessage не появляется никакого сообщения.
Таким образом, для приведенного ранее контроллера можно создать следующее представление.
Как видно из приведенной разметки, в начале формы присутствует информация о всех ошибках на странице (вызов метода ValidationSummary), после чего идет определение всех полей, с информацией об ошибке для каждого поля. Аналогичным образом можно определить собственную логику для своих полей ввода.
Таким образом, модель разработки приложения на базе платформы ASP.NET MVC Framework предлагает альтернативный подход к процессу валидации данных, введенных пользователем.
Использование валидаторов в приложениях на базе ASP.NET MVC Framework невозможно, поскольку модель разработки на платформе ASP.NET MVC Framework предполагает иные подходы и не позволяет использовать элементы управления. Для осуществления процесса валидации в приложении на базе ASP.NET MVC Framework используется объект ModelState, в котором собирается вся информация об ошибках. Для добавления информации об ошибке в объект ModelState используется метод AddModelError. Процесс валидации осуществляется в действии контроллера. Для отображения информации об ошибках в представлении используются два основных метода – ValidationSummary и ValidationMessage. Метод ValidationMessage позволяет отобразить информацию об ошибке для конкретного поля. Метод ValidationSummary позволяет отобразить информацию о всех ошибках, которые присутствуют на странице.
ModelState?Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.