Как проверить валидность конкретного элемента управления asp.net? - PullRequest
3 голосов
/ 22 июня 2011

В веб-форме есть разные элементы управления проверкой asp.net. Можно ли проверить, является ли конкретный элемент управления валидацией действительным? Например, оставив фокус текстового поля, сначала я проверю, что requiredFieldValidatorUserName действительно? Если это действительно так, я проверю на сервере, используя ajax, что это имя пользователя еще не зарегистрировано.

Edit:

Объяснение: Я хочу проверить достоверность (чтобы входные данные были действительными) элемента проверки на стороне клиента.

Пожалуйста, руководство.

Ответы [ 5 ]

5 голосов
/ 22 июня 2011

Все элементы управления проверки реализуют IValidator, который содержит свойство IsValid.

myValidatorControl.IsValid 
3 голосов
/ 01 июля 2011

Лучшим способом было бы использовать CustomValidator с кодом на стороне клиента, поскольку при этом будут отображаться все сообщения об ошибках, отправка блочной формы, а также гарантируется, что проверка повторяется на стороне сервера - помните, только то, что у вас есть доступная проверка на стороне клиента, не означает, что пользователь видел ее: Всегда проверяйте также и ваш ввод на сервере .

Ваш CustomValidator будет затем закодирован для вызова методов Ajax и будет правильно показывать сообщения об ошибках клиенту:

<asp:Label ID="UserNameLabel" AssociatedControlID="UserName" runat="server">
  UserName *:</asp:Label>
<asp:TextBox ID="UserName" runat="server" />
<asp:RequiredFieldValidator ID="UserNameRequired" runat="server" 
                            ControlToValidate="UserName" EnableClientScript="true"
                            ErrorMessage="You must supply a username!" />
<asp:CustomValidator ID="UserNameCustom" runat="server"
                     ControlToValidate="UserName" 
                     ClientValidationFunction="CheckExisting"
                     OnServerValidate="UserNameCustomValidate"
                     ErrorMessage="Username already taken" />

А ваша функция ClientValidation должна выглядеть примерно так:

<script type="text/javascript">
  function CheckExisting(source, arguments) {
    // Pass the arguments.Value to your AJAX call:
    if (ajaxCallUserNameTaken(arguments.Value)) {
      arguments.IsValid = false;
    }
  }
</script>

(Очевидно, вам нужно написать метод ajaxCallUserNameTaken для вызова метода вашей страницы / веб-службы / и т. Д.)

Делая это таким образом, вы гарантируете, что методы валидации будут соответствовать ожидаемым; он будет вызываться всякий раз, когда пользователь выходит из текстового поля , оставляя значение (он не будет вызываться, если текстовое поле пусто), и будет гарантировать, что пользователь не сможет отправить страницу, пока он не предоставит уникальная ценность. Вы также захотите создать метод, на который ссылается OnServerValidate, чтобы гарантировать, что значение хорошо, когда оно попадает и на сервер - это должно вызывать тот же код, который используется конечной точкой AJAX для уменьшения дублирования кода и т. Д.

Первоначально я собирался предложить, чтобы вы могли использовать объект Page_Validators на стороне клиента для некоторой проверки в событии onBlur, но я не думаю, что это подходит здесь, так как это приводит к большему боль:

  1. Предполагается, что хотя на странице может быть несколько валидаторов, в проверяемом нами элементе управления есть только RequiredFieldValidator
  2. RequiredFieldValidator не срабатывает в течение OnBlur, если пользователь выходит из элемента управления без установки значения - только если он установил и сбросил значение, поэтому даже если isvalid равно true, вам необходимо проверить для пустой строки!
1 голос
/ 22 июня 2011

Вы можете сделать это, установив ValidationGroup для элемента управления Validator, который вы хотите рассматривать как отдельный от других. Убедитесь, что он соответствует ValidationGroup проверяемого элемента управления (поле вашего имени пользователя).

1 голос
/ 22 июня 2011

Я только что столкнулся с той же проблемой, и я установил CausesValidation="true" для элемента управления textbox, и это сработало. Просто попробуйте:)

0 голосов
/ 11 декабря 2016

Я немного возился с этим и нашел довольно простое (не очень эффективное) решение, чтобы справиться с этим с помощью jQuery.

Используйте эту функцию, чтобы проверить достоверность вашего элемента управления:

function validateControl() {
    return $('#YOUR_VALIDATOR_ID').css("visibility") == "visible"

если вы используете Display="Dynamic" в вашем валидаторе, то функция выглядит следующим образом:

function validateControl() {
    return return $('#YOUR_VALIDATOR_ID').css("display") == "inline"

Обязательно проверьте истинный идентификатор вашего валидатора, если вы используетеMasterpage, так как он будет отличаться от того, что в вашей IDE.Сделайте это, просмотрев исходный код страницы в своем браузере.

Лучшим решением, конечно же, будет проверка вашей формы другим способом, с использованием JavaScript или CustomValidator, который позволит вам написать свой собственный код.

...