2013-07-15 3 views
0

Я создаю функцию, позволяющую пользователям изменять свои пароли. Таким образом, это означает, что у меня есть три текстовых поля, которые должны быть проверены (текущий = текущий текущий, и новый == повтор). Поэтому я пытаюсь создать пользовательский валидатор в первый раз и не знаю, как это сделать. Из другого примера, который я видел, валидатор привязан только к одному полю ввода, что означает, что свойство ControlToValidate скорее самоочевидно. Но теперь, правда?Проверка нескольких элементов управления с помощью CustomValidator

Я пытаюсь сделать это:

var passwordValidator = new CustomValidator() 
      {     
       Display = ValidatorDisplay.None, 
       ValidationGroup = "PasswordValidationGroup" 
      }; 

passwordValidator.ServerValidate += ChangePasswordServerValidate; 

ValidationPlaceHolder.Controls.Add(passwordValidator); 

Но я не получаю результатов я после. Валидатор действительно выполняется, когда ожидается, и отладка показывает, что он следует за if/else-структурой, как ожидалось, но сообщение об ошибке никогда не будет установлено. Итак, как мне настроить его для проверки трех элементов управления? Связано ли это с ValidationGroup? Я просто установил это свойство аналогично тому, как это было в этом другом настраиваемом валидаторе.

private void ChangePasswordServerValidate(object sender, ServerValidateEventArgs e) 
     { 
      var validator = sender as IValidator; 
      var user = SessionManager.Get<OrderFacade>(SessionKeys.OrderFacade).User; 

      if (CurrentPasswordTextBox.Text == "" || NewPasswordTextBox.Text == "" || RepeatPasswordTextBox.Text == "") 
      { 
       validator.ErrorMessage = SiteTextResources.CreateAccount_YourEmailAddressEmpty; 
       e.IsValid = false; 
      } 
      else if (!NewPasswordTextBox.Text.Equals(RepeatPasswordTextBox.Text)) 
      { 
       validator.ErrorMessage = SiteTextResources.CreateAccount_YourEmailAddressEmpty; 
       e.IsValid = false; 
      } 
      else 
      { 
       ResolveClient<IUserClient>().TryPassword(user.UserName, CurrentPasswordTextBox.Text, passwordSuccessfullyChanged => 
       { 
        e.IsValid = passwordSuccessfullyChanged; 
        validator.ErrorMessage = String.Empty; 
       }, error => 
       { 

       }); 
      }    
     } 

ответ

0

Сообщение об ошибке не устанавливается, поскольку вы устанавливаете дисплей на None. Измените его на Static или Dynamic. Из documentation:

  • None - Сообщение проверки никогда не отображается инлайн.
  • Статический - Пробел для сообщения проверки размещается на странице макет.
  • Dynamic - Пространство для сообщения о проверке динамически добавляется на страницу , если проверка не выполняется.

Что касается деталей проверки, если вам нужно проверить содержимое 3 управления, сделать это внутри метода ChangePasswordServerValidate и установите e.IsValid соответственно. Свойство ControlToValidate здесь не имеет отношения.

+0

Некоторое время назад я удалил ControlToValidate, после спотыкания на каком-то форуме. Но сообщение об ошибке все еще не отображается. Изменение Display to Static или Dynamic не помогло :((fwiw, все другие валидаторы имеют «None»). –

+0

@ChristoferOlsson добавьте код для метода ChangePasswordServerValidate, пожалуйста, – nmat

+0

Сказал и сделал :) –

Смежные вопросы