В -depth объяснение ASP+ проверка
Энтони Мур
Microsoft Corporation
Октябрь 2000
Резюме: Подробные объяснения использования управления веб -контролем ASP+ Verification.
Оглавление
Краткое введение
начиная
Когда это происходит?
Последовательность проверки на стороне сервера
Проверка клиента
Эффективные правила и полезная информация об ошибках
Включенные, видимые и отображающие свойства
CustomValidator Control
Какие элементы управления могут быть проверены?
Конец
-------------------------------------------------- ------------------------------------------------------ ------------------------
Краткое введение
В этой статье подробно подробно объясняется метод работы управления проверкой ASP+. Если вы хотите создать сложную страницу, которая содержит контроль проверки, или расширить структуру проверки, рекомендуется прочитать эту статью. Если вы хотите научиться использовать контроль проверки или решить, использовать ли контроль проверки, см. «Пользователь ASP+ Enter Verification (английский)».
начиная
Мы знаем, что важно понимать проверку в течение всего процесса разработки ASP+. Посмотрите на большинство современных коммерческих веб -сайтов, вы обнаружите, что на этих сайтах есть много форм, которые, очевидно, выполняются путем выполнения большого количества рукописного кода. Написание кода проверки не интересная работа. Если вы напишете код для отображения таблицы данных или динамически генерировать диаграммы, он может быть очень привлекательным, но никто не может подтвердить с его коллегами, что этот «крутой» метод может запретить пустое значение в поле «Имя».
По другим причинам проверка веб -приложений также очень неприятная. HTML 3.2 имеет много ограничений на контент, который вы можете управлять, или обратную связь, которые вы можете получить от пользователя, поэтому его нельзя применить к методам, которые можно использовать для более полноценного клиента, таких как запрещение пользователей вводить определенные символы или издавая звук. Использование сценария браузера может дать более мощную проверку. Тем не менее, этот метод трудно подтвердить, потому что браузер клиента не обязательно является сценарием, а вредоносные пользователи могут обойти его. Поэтому, чтобы обеспечить безопасность сайта, необходимо провести ту же проверку сервера.
При разработке ASP+наше первоначальное намерение состоит в том, чтобы использовать только один элемент управления для проверки обработки. Но когда он был разработан, я обнаружил, что это желание не может быть достигнуто. Мы исследовали большое количество входных форм данных, чтобы найти решение, которое можно применить к как можно большему количеству форм. Мы обнаружили, что таблица ввода данных имеет много интересных функций:
Хотя информация об ошибках или значки часто рядом с входными элементами, они почти всегда расположены в разных ячечах таблицы.
На странице часто есть область, чтобы суммировать все ошибки.
Многие сайты включают клиентские сценарии, чтобы обеспечить более быструю обратную связь, одновременно предотвращая проезд между сервером.
Многие сайты, содержащие клиентские сценарии, отображают информационные поля, когда есть ошибка.
Будет проверен не только ввод текста, но также будет подтверждена список отброса -Down -Down и кнопка с одной -выбеждением.
Если поле пустое, сайт обычно показывает различную информацию или значки, когда запись недействительна.
Многие эффективные экзамены могут быть хорошо заменены на часто используемые выражения.
Проверка обычно основана на результатах сравнения между двумя входами.
90% или более 90% задач проверки являются некоторыми распространенными операциями, такими как проверка имени или почтового кода. Большинство сайтов по -прежнему повторяют эти задачи.
Поскольку разница между сайтами обычно слишком велика, идеальное решение не может быть получено для выполнения всех задач проверки каждого сайта.
Принимая во внимание все вышеперечисленные ситуации, конечные решения включают пять элементов управления устройством проверки, управления проверками и интеграцией с объектами страницы. В то же время очевидно, что решение необходимо расширить, и для сотрудничества на клиенте и сервере необходим API.
Мы обнаружили, что нам, казалось, нужен был более крупный набор инструментов во время различных проверок исследований. В большинстве компонентных сред, таких как Microsoft® ActiveX®, мы могли попытаться интегрировать функции всех элементов управления проверкой в элемент управления для обработки различных атрибутов в разных режимах. К счастью, в рамках Microsoft® .NET существует волшебное наследство.
Большинство из этих элементов управления реализованы в их общедоступном родительском уровне Basevalidator. Вы также можете выполнить различные задачи от Basevalidator или других элементов управления. Фактически, даже если Basevalidator слишком ленив, чтобы достичь своих собственных текстовых атрибутов, он унаследован от атрибутов метки.
Когда это происходит?
Очень эффективно понимать последовательность событий при обработке страницы, содержащей страницу веб -управления. Если условие проверки является необязательным, вам необходимо точно понять, когда клиент и сервер проверены. Если вы хотите написать процедуру проверки самостоятельно, это может быть очень время, затрагивающее или побочные эффекты. В то же время, также важно понимать время на вызове рутины проверки.
Во -первых, давайте посмотрим на сервер.
Последовательность проверки на стороне сервера
Важно понять период достоверности страницы. Если вы привыкли обрабатывать форму в Visual Basic или аналогичных функциональных клиентских инструментах, вам нужно потратить определенное время, чтобы понять. Все объекты на странице и странице не эффективны при взаимодействии с пользователями, хотя иногда это то же самое.
Ниже приведена упрощенная последовательность событий при первом посещении страницы:
Создайте страницу и ее управление на основе файла ASPX.
Запускает событие page_load.
Страница и атрибуты управления хранятся в скрытом поле.
Страницы и элементы управления преобразуются в HTML.
Отбросьте все.
Теперь, когда пользователь нажимает кнопку или аналогичный элемент управления, он вернется на сервер, а затем выполнит аналогичную последовательность событий. Эта последовательность называется последовательности возврата:
Создайте страницу и ее управление на основе файла ASPX.
Восстановите страницу и атрибуты управления из скрытого поля.
Введите управление страницей обновления в соответствии с пользователем.
Запускает событие page_load.
Триггер изменений событий уведомления.
Страница и атрибуты управления хранятся в скрытом поле.
Страницы и элементы управления преобразуются в HTML.
Снова отбрасывайте все.
Почему бы нам не держать все объекты в памяти? Потому что веб -сайты, установленные с ASP+, не могут обрабатывать очень большое количество пользователей. Следовательно, память сервера сохраняет только контент для обработки немедленно.
Когда проверка сервера -сторона? При первом получении информации о странице проверка сервера не будет выполнена вообще. Большинство конечных пользователей очень серьезны.
В последовательности событий возвращения проверка будет выполнена между шагом 3 и шагом 4. Другими словами, проверка происходит после атрибутов управления загрузкой данных от пользователя, но до большей части количества выполнения кода. Это означает, что при написании пользовательских событий это обычно можно использовать для проверки. При нормальных обстоятельствах вы захотите сделать это.
Недостатком проверки в этот момент является: если вы хотите изменить некоторые атрибуты, которые влияют на проверку путем программирования, будет слишком поздно. Например, вы обнаружите, что если вы используете код, чтобы включить или отключить атрибуты управления проверкой или изменить управление проверкой, вы не увидите никакого эффекта перед обработкой страницы. Этой проблемы можно избежать через следующие два метода:
Измените атрибут перед проверкой.
Повторно -то есть контроль после изменения атрибута.
Оба метода должны использовать эффективные атрибуты и методы проверки на объекте страницы.
Page API
Объекты страниц включают некоторые важные атрибуты и методы, связанные с проверкой сервера. Таблица 1 суммирует эти атрибуты и методы:
Таблица 1. Атрибуты и методы объекта страницы
Атрибут или описание метода
Атрибут Isvalid является наиболее полезным атрибутом. Этот атрибут может проверить, эффективна ли вся форма. Эта проверка обычно выполняется перед обновлением базы данных. Только все объекты валидаторов действительны, атрибут верно, а значение не хранится в кэше.
Валидаторы приписывают сбор всех объектов проверки этой страницы. Это набор объектов, которые реализуют интерфейс Ivalidator.
Метод значения вызывает метод при проверке. Метод выполнения по умолчанию в объекте страницы состоит в том, чтобы обратиться к каждому устройству проверки и требовать оценки устройства проверки.
Коллекция Validators очень полезна для многих задач. Этот набор представляет собой набор объектов, которые реализуют интерфейс Ivalidator. Причина, по которой я использую объект, не является управлением элементом управления, потому что объект страницы обращает внимание только на интерфейс Ivalidator. Поскольку все проверки обычно используются для достижения некоторых визуальных элементов управления Ivalidator, любой должен иметь возможность использовать любой объект проверки и добавить объект проверки на страницу.
Интерфейс Ivalidator содержит следующие атрибуты и методы:
Таблица 2. Атрибуты и методы интерфейса Ivalidator
Атрибут или описание метода
Атрибут isvalid указывал, прошел ли прошел тест достоверности, выполняемый отдельным объектом проверки. Вы можете вручную изменить значение после проверки.
Атрибут ErrorMessage вводит ошибку для проверки объекта, который будет проверен, и ошибки, которые могут быть отображены пользователю.
Метод проверки проверяется на обоснованность объекта Verification для обновления его значения ISVALID.
Вы можете использовать этот интерфейс для выполнения некоторых интересных задач. Например, чтобы сбросить страницу в эффективное состояние, используйте следующий код (например, пример, показанный в C#):
Значение Ivalidator;
Foreach (val в валидаторах) {
valuevalid = true;
}
Чтобы повторно рассказать всю последовательность проверки, используйте следующий код:
Значение Ivalidator;
Foreach (val в валидаторах) {
Val.validate ();
}
Если у вас есть Beta 1 Edition или более высокие версии, вы также можете вызвать метод значения только для объекта страницы, чтобы можно было выполнить ту же задачу. Чтобы внести некоторые изменения перед проверкой, метод значения может быть покрыт. В этом примере показана страница, содержащая устройство проверки, которое открывается или выключен в соответствии со значением флажества:
Открытый класс условной: страница {
public htmlinputcheckbox chksameas;
Public ResearchfieldValidator RfvalShipAddress;
Защищенный переопределение void validate () {) {)
// просто проверьте адрес доставки (если отличается от адреса оплаты)
Bool enableShip =!
rfvalshipaddress.enabled = enableShip;
// сейчас выполняет проверку
base.validate ();
}
}
Проверка клиента
Если ваша страница включена в соответствии с проверкой клиента, во время поездки обратно будет происходить совершенно другая последовательность событий. Проверка клиента использует клиент JScript®. Проверка не требует каких -либо бинарных компонентов.
Хотя стандартизация языка JScript хорошо сделана, модель объекта документа (DOM), используемая в документации HTML в браузере (DOM), не имеет широко используемых стандартов. Следовательно, проверка клиента выполняется только в интернет -Explorer 4.0 и более высоких версиях, поскольку проверенный объект - это интернет -проводник DOM.
С точки зрения сервера проверка клиента только означает, что элемент управления проверкой отправляет различный контент в HTML. Кроме того, инцидентная последовательность точно такая же. Проверка сервера -сторона по -прежнему выполняется. Хотя это кажется излишним, это очень важно, потому что:
Некоторые элементы управления проверкой могут не поддерживать сценарий клиента. Существует хороший пример: если вы хотите использовать функции проверки CustomValidator и сервера одновременно, но нет никакой функции проверки клиента.
Меры предосторожности. Некоторые люди могут легко получить страницу, содержащую скрипт, а затем отключить или изменить страницу. Вы не должны использовать свой скрипт, чтобы не допустить ввода плохих данных в вашей системе, но только для пользователей, чтобы получить более быструю обратную связь. Поэтому, если вы хотите использовать CustomValidator, вы не должны предоставлять функцию проверки клиента без соответствующих функций проверки сервера.
Каждый элемент управления проверкой может убедиться, что стандартный блок сценария клиента отправляется на страницу. Фактически, это лишь небольшая часть кода, которая содержит ссылку на код в библиотеке сценариев webuivalidation.js. Этот файл библиотеки сценариев содержит всю логику, проверенную клиентом.
О библиотеке сценариев
Поскольку проверка сценария веб -управления находится в библиотеке сценариев, код, проверенный всеми клиентами, не требуется напрямую отправлять его на страницу, хотя он, похоже, выполняется на поверхности. Ссылки на файл основного сценария аналогичны следующему:
<сценарий языка = javaScript
src =/_ aspx/1.0.9999/script/webuivalidation.js> </script>
По умолчанию файл скрипта будет установлен в каталоге ROOT по умолчанию в каталоге _aspx, и использует сценарий, включающий инструкцию, которая начинается с положительной диагональной линии. Ссылка показывает, что каждый отдельный объект не должен включать библиотеку сценариев, и все страницы на одном компьютере могут ссылаться на один и тот же файл. Вы заметите, что в этом пути также есть номер версии публичного языка, так что разные версии выполнения могут работать на одном компьютере.
Если вы посмотрите на свой каталог виртуальных корневых корней по умолчанию, вы найдете файл и просмотрите контент. Положение этих файлов указана в файле config.web. File config.web - это файл XML для большинства настроек ASP+. Ниже приведено определение позиции в этом файле:
<webcontrols
Clientscriptslocation =/_ aspx/{0}/script/
/>
Поощряйте вас прочитать сценарий, чтобы вы могли понять события, которые происходят глубоко. Тем не менее, рекомендуется не изменять эти сценарии, потому что их функции тесно связаны с конкретными версиями выполнения. Когда версия обновляется, эти сценарии также могут быть обновлены соответствующим образом. Если конкретные проекты должны быть изменены, сначала резервную копию этих сценариев, а затем укажите свой проект на файл резервного копирования, метод состоит в том, чтобы использовать частный файл config.web для замены позиции этих файлов. Если строка содержит инструкцию формата {0}, номер версии заменит инструкцию, когда будет заменен номер версии во время выполнения. Лучше всего изменить эту позицию на относительную ссылку или абсолютную ссылку.
Отключить проверку клиента
Иногда вы можете не захотеть проверять клиентов. Если количество полей ввода мало, проверка клиента может быть не очень полезной. В конце концов, у вас должна быть логика, которая требует одного раундового сервера каждый раз. Вы обнаружите, что динамическая информация о клиенте окажет негативное влияние на ваш макет.
Чтобы отключить проверку клиента, используйте страницу ClientTarget = Downlevel. Эта инструкция похожа на начало файла ASPX:
< %@page language = c# clientTarget = downlevel %>
Значение по умолчанию этой инструкции является автоматическим, что указывает на то, что вы проверяете только клиента в Microsoft Internet Explorer 4.0 или выше.
Примечание. К сожалению, в бета -1 эта инструкция не только отключена для проверки, и в то же время все веб -элементы управления используют теги HTML 3.2 для обработки, что может иметь неожиданные результаты. Окончательная версия обеспечивает лучший способ контроля этой проблемы.
Последовательность событий клиента
Эта последовательность - последовательность событий, которая возникает, когда страница, содержащая проверку клиента:
При загрузке браузера на странице необходимо инициализировать каждое управление проверкой. Эти элементы управления отправляются в виде знака <pran>, а их функции HTML являются наиболее близкими к функциям на сервере. Самое главное, что в настоящее время все входные элементы, на которые ссылается устройство проверки, будут «повешены». Условный входной элемент изменит свое событие клиента, чтобы вызвать подпрограмму проверки при введении изменения.
Код в библиотеке скриптов будет выполняться, когда пользователь использует клавишу вкладки для переключения между каждым полем. Когда определенное независимое поле изменяется, условия проверки будут переоценены, а устройство проверки будет видимым или невидимым по мере необходимости.
Когда пользователь пытается отправить форму, все проверки будут оценены. Если все эти проверки эффективны, форма будет отправлена на сервер. Если в одном или нескольких местах возникнет ошибка, возникнет следующая ситуация:
Представление было отменено. Форма не отправлена на сервер.
Все неверные проверки видны.
Если содержит резюме для проверки Showmumary = true, все ошибки из контроля проверки будут собраны, и содержимое обновляется этими ошибками.
Если резюме для проверки содержит ShowMessagebox = true, он будет собирать ошибки и отобразить эти ошибки в информационном поле клиента.
Поскольку управление проверкой клиента выполняется, когда управление проверкой клиента выполняется при каждом входном изменении или при подаче, эти элементы управления проверкой обычно оцениваются в два или более два раза на клиенте. Обратите внимание, что после подачи эти элементы управления проверкой все равно будут переоценены на сервере.