Проверка клиента
Если на вашей странице включена аутентификация клиента, во время поездки происходит совершенно другая последовательность событий. Аутентификация клиента реализована с использованием клиента JSCRICT®. Для реализации этой проверки не требуется бинарных компонентов.
Хотя язык JScript хорошо стандартизирован, не существует широко принятого стандарта для модели объекта документа (DOM), используемой для взаимодействия с документами HTML в браузере. Следовательно, аутентификация клиента выполняется только в Internet Explorer 4.0, а затем, потому что объектом аутентификации является интернет -проводник DOM.
С точки зрения сервера, проверка клиента только означает, что управление проверкой отправляет различный контент в HTML. Кроме этого, его последовательность событий точно такая же. Проверка на стороне сервера все еще выполняется. Хотя это может показаться избыточным, это очень важно, потому что:
Некоторые элементы управления проверкой могут не поддерживать клиентские сценарии. Существует хороший пример: если вы хотите использовать функции как CustomValidator, так и проверки сервера, но нет никакой функции проверки клиента.
Меры предосторожности. Некоторые люди могут легко получить страницу со сценариями, а затем отключить или изменить эту страницу. Вам не следует использовать сценарии, чтобы не допустить ввода плохих данных в вашей системе, а просто для получения более быстрых отзывов от пользователей. Поэтому, если вы хотите использовать CustomValidator, вы не должны предоставлять функцию проверки клиента без соответствующей функции проверки сервера.
Каждое управление проверкой гарантирует, что на страницу отправляется стандартный блок сценариев клиента. На самом деле, это лишь небольшая часть кода, которая содержит ссылки на код в библиотеке сценариев webuivalidation.js. Этот файл библиотеки сценариев содержит всю логику для проверки клиента.
О библиотеке сценариев
Поскольку скрипт управления проверкой веб-управления находится в библиотеке сценариев, нет необходимости отправлять весь подтвержденный клиентом код непосредственно на страницу, хотя, похоже, он делает это на поверхности. Основные ссылки на файл сценария выглядят так:
<script language = "javascript"
src = "/_ aspx/1.0.9999/script/webuivalidation.js"> </script>
По умолчанию файл скрипта установлен в каталоге ROOT по умолчанию в каталоге «_aspx» и вызывается с помощью корневой сценарии, включающей Директиву, которая начинается с прямой черты. Эта ссылка указывает на то, что каждый отдельный объект не должен содержать библиотеку сценариев, и все страницы на одном компьютере могут ссылаться на один и тот же файл. Вы заметите, что в этом пути также есть общий номер версии выполнения языка, чтобы различные версии выполнения могли работать на одном компьютере.
Если вы посмотрите на свой каталог виртуальных корневых корней по умолчанию, вы найдете файл и просмотрите его содержимое. Расположение этих файлов указано в файле config.web. Файл 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, которые могут дать неожиданные результаты. Окончательная версия обеспечивает лучший способ контроля этой проблемы.
Последовательность событий клиента
Эта последовательность представляет собой последовательность событий, которые происходят при запуске страницы, содержащей проверку клиента:
Когда страница загружается в браузер, каждый контроль проверки должен быть инициализирован некоторое время. Эти элементы управления отправляются как теги <pan>, а их атрибуты HTML наиболее близки к серверу. Самое главное, что все входные элементы, на которые ссылается валидатор, «установлены» в настоящее время. Насланный входной элемент будет изменять свои клиентские события, так что подпрограмма проверки называется каждый раз, когда входной изменение.
Код в библиотеке скриптов будет выполняться, когда пользователь переключается между полями с использованием клавиши TAB. Когда отдельное поле меняется, условие проверки переоценивается, что делает валидатор видимым или невидимым по мере необходимости.
Когда пользователь пытается отправить форму, все валидаторы переоценены. Если все эти валидаторы действительны, форма будет отправлена на сервер. Если есть один или несколько ошибок, будут происходить следующие ситуации:
Отмена была отменена. Форма не отправлена на сервер.
Все неверные валидаторы видны.
Если содержит резюме проверки Showmumary = true, все ошибки из контроля проверки собираются, и их содержимое обновляется этими ошибками.
Если резюме проверки содержит Showmessagebox = true, ошибки собираются и отображаются в информационном поле клиента.
Поскольку элементы управления проверкой клиента выполняются каждый раз, когда вводится или отправляется изменение, эти элементы управления проверкой обычно оцениваются на клиенте два или более раз. Обратите внимание, что после подачи эти элементы управления проверкой все равно будут переоценены на сервере.
Клиент API
Существует небольшой API, который можно использовать на клиентской машине для достижения различных эффектов в вашем собственном клиентском коде. Поскольку некоторые процедуры не могут быть скрыты, теоретически, вы можете использовать клиента для проверки всех переменных, функций и функций, определенных сценарием. Однако многие из них являются деталями реализации, которые могут быть изменены. Следующее обобщает объекты клиента, которые мы призываем вас использовать.
Таблица 3. Клиентские объекты
Имя типа Описание
Логическая переменная Page_isvalid указывает, является ли страница действительна в настоящее время. Скрипт проверки всегда поддерживает переменную в курсе.
Page_validators Atlement Marray Это массив, содержащий все валидаторы на странице.
Логическая переменная Page_validationActive указывает, должна ли проверить проверку. Установка этой переменной на False может быть отключена с помощью программирования.
ISVALID BOOLEAN Proportment Каждый валидатор клиента имеет это свойство, указывающее, является ли валидатор в настоящее время действителен. Обратите внимание, что в версии PDC это свойство смешивается с верхним и нижним чеходом («Isvalid»).
Обход аутентификации клиента
Одна задача, которую вам часто нужно выполнить, - добавить кнопку «Отмена» или кнопку навигации на странице. В этом случае вы можете отправить страницу, используя кнопку, даже если на странице есть ошибка. Поскольку событие клиента «OnClick» происходит перед событием «Onsubmit» формы, она может избежать отправки чеков и обходить проверку. Ниже описывается, как выполнить задачу, используя управление изображением HTML в качестве кнопки отмены:
<input type = image Runat = сервер
value = "Отмена"
Onserverclick = cmdcancel_click>
Выполнение этой задачи с помощью кнопки или управления Imagebutton вызовет некоторую путаницу, потому что событие «OnClick» считается событием на стороне сервера с тем же именем. Вы должны установить событие в сценарии клиента:
<ASP: ImageButton Runat = идентификатор сервера = cmdimgcancel
AlternateText = "Отмена"
Onclick = cmdcancel_click/>
<script language = "javascript">
Document.all ["cmdimgcancel"]. Onclick =
новая функция ("page_validationActive = false;");
</script>
Другой способ решить эту проблему - установить кнопку «Отмена», чтобы она не запускала событие совершения в сценарии клиента, когда он возвращается. Примеры управления HTMlinputButton и Linkbutton являются примерами этого.
Спецэффекты
Другое распространенное требование заключается в том, что в случае ошибки, в дополнение к сообщению об ошибке, отображаемом самим валидатором, необходимы другие эффекты. В этом случае любые изменения, которые вы вносите, должны быть внесены одновременно на сервере или клиенте. Предположим, вам нужно добавить метку, чтобы изменить цвет в зависимости от того, является ли вход действительным или нет. Вот как реализовать эту задачу на сервере:
открытый класс ChangeColorpage: Page {
Общественный ярлык lblzip;
Public RegularexPressionValidator Valzip;
Защищенный переопределение void onload (EventArgs e) {
lblzip.forecolor = valzip.isvalid?
}
}
Все вышеперечисленные методы идеальны, но пока вы изменяете проверку, как указано выше, вы обнаружите, что, если вы не сделаете то же самое на клиенте, она будет выглядеть очень непоследовательной. Структура проверки предотвратит вас от многих из этих двойных эффектов, но она не может избежать других эффектов, которые вы должны достичь одновременно как на клиенте, так и на сервере. Вот фрагмент выполнения той же задачи на клиенте:
<ASP: Label ID = LBLZIP Runat = Server
Text = "Почтовый индекс:"/>
<ASP: TextBox ID = TXTZIP Runat = Server
/> </asp: textbox> <br>
<asp: regularexpressionValidator id = valzip runat = server
Controltovalidate = txtzip
Errormessage = "Недопустимый почтовый код"
ValidationExpression = "[0-9] {5}" /> <br>
<сценарий языка = javascript>
функция txtziponchange () {
// Если аутентификация клиента не является активной, никаких действий не выполняется
if (typeof (page_validators) == "undefined") return;
// Измените цвет этикетки
lblzip.style.color = valzip.isvalid?
}
</script>
Бета -1 клиент API
Для бета -версии 1 некоторые функции, которые можно вызвать из сценариев клиента, могут вызвать другие ситуации.
Таблица 4. Функции, вызванные из клиентских сценариев
Имя Описание
ValidatorValidate (val) принимает валидатор клиента в качестве входного ввода. Заставьте валидатор проверить его ввод и обновить его дисплей.
Validatorenable (val, enable) получает валидатор клиента и логическое значение. Включить или отключить валидатор клиента. В случае отключения клиентский валидатор не будет оцениваться, а валидатор клиента всегда будет выглядеть как действительный.
ValidatorHookupControl (Control, Val) получает входной элемент HTML и валидатор клиента. Измените или создайте событие изменения этого элемента, чтобы валидатор обновлялся при его изменении. Эта функция подходит для пользовательских валидаторов на основе нескольких входных значений.
Его специальное назначение - включить или отключить валидатор. Если вы хотите, чтобы проверка была эффективной только в определенной ситуации, вам может потребоваться изменить состояние активации как на сервере, так и на клиенте, в противном случае вы обнаружите, что пользователь не может отправить страницу.
Ниже приведен пример выше плюс поле, которое проверяется только тогда, когда флажок не контролируется.
открытый класс условной: страница {
public htmlinputcheckbox chksameas;
PublicefieldValidator rfvalshipAddress;
Защищенный переопределение void validate () {
Bool enableShip =! CHKSAMEAS.Checked;
rfvalshipaddress.enabled = enableShip;
base.validate ();
}
}
Вот клиент -эквивалентный код:
<input type = флажки Runat = Server Id = CHKSAMEAS
> То же, что и адрес оплаты <br>
<сценарий языка = javascript>
function onChangesameas () {
var enableShip =! event.srcelement.status;
Validatorenable (rfvalshipAddress, inebleShip);
}
</script>