1

создать пользовательский validateur в MVC 4:валидатора MVC + клиент проверки на стороне

public class FirstNameValidator : ValidationAttribute 
{ 
    private IRegistrationConfiguration _registrationConfiguration; 
    public string Category { get; set; } 
    public bool IsLocal { get; set; } 
    public FirstNameValidator() 
    { 
     _registrationConfiguration = DependencyResolver.Current.GetService<IRegistrationConfiguration>(); 
    } 
    public FirstNameValidator(IRegistrationConfiguration registrationConfiguration) 
    { 
     _registrationConfiguration = registrationConfiguration; 
    } 

    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     if (value == null) 
     { 

      return new ValidationResult("Le prénom ne doit pas être vide"); 
     } 
     else 
     { 
      if(string.IsNullOrEmpty(value.ToString())) 
       return new ValidationResult("Le prénom ne doit pas être vide"); 
       else if(value.ToString().Length<2) 
       return new ValidationResult("Le prénom doit avoir + que 2 caractères"); 
      else if (value.ToString().Length > 30) 
       return new ValidationResult("Le prénom doit avoir - que 30 caractères"); 

     } 

     return null; 

    } 

} 

я пользователь этих данных аннотаций в моем ViewModel:

public class RegistrationViewModel 
{ 
    public string Country { get; set; } 
    public string Civility { get; set; } 
    [FirstNameValidator(Category = "Registration", IsLocal = false)] 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

}

Как могу я выполнить проверку на стороне клиента?

ответ

1
  1. Внедрение IClientValidatable в ваш атрибут.

    класс FirstNameValidator общественности: ValidationAttribute, IClientValidatable

  2. Написать Javascript адаптер и включите его в представлении.

  3. Соблюдайте правило проверки javascript и включите его в свой вид.

Для получения более подробной информации вы можете выполнить поиск "asp.net mvc 4 custom client side validation". Например, вы можете посмотреть Custom data annotation validator или How to support client side custom validation

0

На основе кода вы пишете, вы могли бы быть лучше использовать RegularExpressionAttribute вместо этого. Вы можете использовать шаблон, такой как "[A-Za-z]{1,30}$", чтобы ваше имя FirstName было от 1 до 30 символов. В качестве альтернативы вы также можете использовать RequiredAttribute, чтобы отметить поле как обязательное.

Преимущество использования этих валидаторов заключается в том, что они уже подключены к проверке на стороне клиента в JQuery.

Если вы должны использовать свои собственные валидаторы, тогда реализуйте IClientValidatable и напишите пользовательский адаптер проверки JQuery.

Как в стороне, в наших проектах мы катим наши собственные валидаторы, которые использовали шаблонный шаблон регулярного выражения в методе IsValid(). Затем мы подключаем это к существующему адаптеру валидатора regex в JQuery с помощью метода IClientValidatable. Мы сделали это, чтобы мы могли контролировать используемые сообщения об ошибках.

public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) 
{ 
    ModelClientValidationRule rule = new ModelClientValidationRule(); 
    rule.ErrorMessage = ErrorMessages.ClientFieldInputValidation; 
    rule.ValidationType = "regex"; 
    rule.ValidationParameters.Add("pattern", _regEx); 
    yield return rule; 
} 
Смежные вопросы