自定义验证器MVC +验证客户端

时间:2013-07-17 13:53:08

标签: asp.net-mvc validation asp.net-mvc-4 client-side unobtrusive-validation

我在MVC 4中创建了一个自定义validateur:

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; }

}

我如何进行客户端验证?

2 个答案:

答案 0 :(得分:1)

  1. 在您的属性中实现IClientValidatable。

    公共类FirstNameValidator:ValidationAttribute,IClientValidatable

  2. 编写javascript适配器并将其包含在您的视图中。

  3. 编写javascript验证规则本身并将其包含在您的视图中。

  4. 您可以搜索“asp.net mvc 4自定义客户端验证”以获取更多详细信息。 例如,您可以查看Custom data annotation validatorHow to support client side custom validation

答案 1 :(得分:0)

根据您编写的代码,您可能最好使用RegularExpressionAttribute。您可以使用"[A-Za-z]{1,30}$"等模式来确保FirstName的长度介于1到30个字符之间。或者,您也可以使用RequiredAttribute将字段标记为必填字段。

使用这些验证器的好处是它们已经连接到JQuery中的客户端验证。

如果必须使用自己的验证器,请实现IClientValidatable,并编写自定义JQuery验证适配器。

顺便说一下,在我们的项目中,我们使用IsValid()方法中的正则表达式模式匹配器来滚动我们自己的Validators。然后,我们通过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;
}