Проверка сведений, вводимых пользователем на веб-страницах ASP.NET
Обновлен: Ноябрь 2007
Возможность добавления проверки ввода в веб-страницы ASP.NET реализована с помощью проверяющих элементов управления. Проверяющие элементы управления предоставляют простой механизм для всех общих типов стандартной проверки (например, проверки на допустимость дат или значений в пределах диапазона), а также способы выполнения пользовательской проверки. Кроме того, проверяющие элементы управления позволяют настроить отображение сведений об ошибках.
Проверяющие элементы управления могут использоваться с любыми элементами управления, помещаемыми на веб-страницы ASP.NET, включая серверные HTML-элементы управления и веб-серверные элементы управления. Дополнительные сведения см. в разделе Общие сведения о серверных веб-элементах управления ASP.NET.
Примечание о безопасности. |
---|
По умолчанию веб-страницы ASP.NET автоматически выполняют проверку на потенциально опасные входные данные. Дополнительные сведения см. в разделе Общие сведения об использовании сценариев. |
Использование проверяющих элементов управления
Проверка ввода данных включается путем добавления на страницу проверяющих элементов управления аналогично добавлению других серверных элементов управления. Существуют элементы управления для различных типов проверки, например проверки диапазона и проверки соответствия шаблону. Полный список типов проверки см. в разделе Типы проверки для серверных элементов управления ASP.NET. Каждый проверяющий элемент управления имеет ссылку на элемент управления вводом (серверный элемент управления), расположенный на этой же странице. В процессе обработки ввода данных пользователем (например, при передаче страницы), проверяющий элемент управления выполняет проверку данных, введенных пользователем, и задает свойство, указывающее, прошла ли запись проверку. После вызова всех проверяющих элементов управления для страницы задается свойство, сообщающее о неудаче какой-либо проверки.
Проверяющие элементы управления могут связываться в проверочные группы, чтобы для проверочных элементов управления, принадлежащих к одной группе, проверка выполнялась одновременно. Можно использовать проверочные группы для выборочного включения или отключения функции проверки для связанных элементов управления на странице. Другие процедуры проверки, как, например, отображение элемента управления ValidationSummary или вызов метода GetValidators, могут также иметь ссылку на проверочную группу.
Реализована возможность проверки состояния страницы и отдельных элементов управления в собственном коде. Например, перед обновлением записи с данными, введенными пользователем, необходимо проверить состояние проверяющих элементов управления. При обнаружении недопустимого состояния обновление пропускается. Обычно, если при какой-либо проверке допустимости происходит сбой, следует пропустить всю обработку и возвратить страницу пользователю. Проверяющие элементы управления, обнаружившие ошибки, создают сообщение об ошибках, которое выводится на странице. Можно отобразить в одном месте все ошибки, возникшие при проверке, с помощью элемента управления ValidationSummary.
Примечание. |
---|
Элементы управления, выполняющие обновление, вставку и удаление данных, например, элементы управления GridView, FormView, и DetailsView автоматически проверяют успешность, что перед обновлением данных была выполнена проверка. |
Время проведения проверки
Проверяющие элементы управления выполняют проверку введенных данных программно на стороне сервера. При отправке страницы на сервер проверяющие элементы управления вызываются последовательно для проверки данных, введенных пользователем. Если при проверке возникла ошибка в каком-либо из элементов управления вводом, всей странице присваивается недопустимое состояние, поэтому перед выполнением кода можно проверить допустимость значений. Проверка проводится после инициализации страницы (то есть после обработки данных состояния отображения и обратного вызова), но перед вызовом обработчиков событий Change или Click.
При работе с обозревателем, поддерживающим ECMAScript (Javascript), проверяющие элементы управления могут также выполнять проверку с помощью клиентского сценария. Это может существенно сократить время ответа на странице, поскольку ошибки обнаруживаются немедленно, а сообщения об ошибках отображаются сразу после выхода из элемента управления, содержащего ошибку. Если доступна проверка на стороне клиента, это дает больше возможностей контролировать макет сообщений об ошибках; также можно отобразить сводку ошибок в окне сообщений. Дополнительные сведения см. в разделе Клиентская проверка для серверных элементов управления ASP.NET.
ASP.NET выполняет проверку на сервере, даже если проверяющие элементы управления уже выполнили ее для клиента, поэтому можно проверить допустимость в серверных обработчиках событий. Кроме того, выполнение повторной проверки на стороне сервера предотвращает возможность пропуска проверки путем отключения или изменения функции проверки клиентского сценария.
Можно запустить проверку в собственном коде путем вызова метода проверяющего элемента управления Validate. Дополнительные сведения см. в разделе Практическое руководство. Программная проверка серверных элементов управления ASP.NET.
Проверка выполнения нескольких условий
Каждый проверяющий элемент управления, как правило, выполняет только одну проверку. Однако зачастую необходимо проверить выполнение нескольких условий. Например, может возникнуть необходимость указать обязательность ввода данных пользователем, а также ограничить данные только датами в заданном диапазоне.
К элементу управления вводом можно присоединить несколько проверяющих элементов управления на странице. В этом случае проверки, выполняемые элементами управления, разрешаются с помощью логического оператора AND, означающего, что данные, введенные пользователем, должны пройти все проверки, чтобы считаться допустимыми.
В некоторых случаях записи в нескольких различных форматах могут быть допустимыми. Например, при выводе запроса телефонного номера разрешается ввести местный, междугородный или международный номер. В данном случае невозможно использовать несколько проверяющих элементов управления, поскольку данные, введенные пользователем, должны пройти все проверки, чтобы считаться допустимыми. Чтобы выполнить этот тип проверки (логический оператор OR используется только в тех случаях, когда необходимо пройти только одну проверку), используется проверяющий элемент управления RegularExpressionValidator, а также указывается несколько допустимых шаблонов в пределах элемента управления. Кроме того, можно использовать проверяющий элемент управления CustomValidator и создать собственный проверочный код.
Отображение сведений об ошибке
Проверяющие элементы управления обычно не видны на воспроизводимой странице. Однако если элемент управления обнаруживает ошибку, он выводит указанный текст сообщения об ошибках. Сообщение об ошибках может быть отображено различными способами, как представлено в приведенной ниже таблице.
Метод отображения |
Описание |
---|---|
Встроенный |
Каждый проверяющий элемент управления способен отобразить сообщение об ошибках (как правило, рядом с элементом управления, в котором возникла ошибка). |
Сводная информация |
Ошибки, возникшие при проверке, собираются и отображаются в одном месте, например в верхней части страницы. Эта стратегия часто используется в сочетании с отображением сообщения рядом с полями ввода, содержащими ошибки. При работе с Internet Explorer 4.0 или более поздней версии сводка отображается в окне сообщений. При использовании проверочных групп требуется элемент управления ValidationSummary для каждой отдельной группы. |
По месту и в сводке |
Сообщение об ошибках может отличаться в сводке и по месту. Этот параметр служит для отображения более короткого сообщения об ошибках по месту и более подробного — в сводке. |
Настройка |
Возможно создание настраиваемого отображения сообщения об ошибке путем сбора сведений об ошибках и разработки собственного вывода. |
При использовании параметров отображения «по месту» или параметров отображения «в сводке» можно форматировать текст сообщения об ошибках с помощью HTML-кода.
Примечание о безопасности. |
---|
При создании настраиваемого сообщения об ошибках следует проверить, не отображаются ли сведения, позволяющие злонамеренным пользователям нарушить защиту приложения. Дополнительные сведения см. в разделе Практическое руководство. Отображение безопасных сообщений об ошибках. |
Объектная модель проверки
Взаимодействие с проверочными элементами управления осуществляется с помощью объектной модели, предоставленной отдельными проверяющими элементами управления и страницей. Каждый проверяющий элемент управления предоставляет собственное свойство IsValid, проверив которое, можно узнать, прошел ли проверку данный элемент управления. На странице также доступно свойство IsValid, которое дает сводную информацию о состоянии IsValid всех проверяющих элементов управления на странице. С помощью этого свойства можно выполнить единичную проверку, позволяющую определить, можно ли продолжать выполнение обработки.
На странице также доступна коллекция Validators, содержащая список всех проверяющих элементов управления на странице. Путем просмотра этой коллекции можно определить состояние отдельных проверяющих элементов управления.
Примечание. |
---|
Существует несколько отличий в объектной модели для проверки на стороне клиента. Дополнительные сведения см. в разделе Клиентская проверка для серверных элементов управления ASP.NET. |
Настройка проверки
Процесс проверки можно настроить следующими способами:
Можно указать формат, текст и расположение сообщений об ошибках. Кроме того, можно указать, будут ли сообщения об ошибке отображаться отдельно или в виде сводки.
Можно создать настраиваемую проверку с помощью элемента управления CustomValidator. Этот элемент управления вызывает созданную логику, но в остальном работает также, как и прочие проверяющие элементы управления при задании состояния ошибки, отображении сообщений об ошибках и т. п. Это позволяет легко создать настраиваемую логику проверки, и в то же время использовать структуру проверки страницы.
Если указана проверка на стороне клиента, можно перехватить вызов проверки и заменить или добавить собственную логику проверки.