1

我在 MVC 4 中创建了一个自定义验证器:

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

}

我如何进行客户端验证?

4

2 回答 2

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

    公共类 FirstNameValidator : ValidationAttribute, IClientValidatable

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

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

您可以搜索“asp.net mvc 4 自定义客户端验证”以获取更多详细信息。例如,您可以查看自定义数据注释验证器如何支持客户端自定义验证

于 2013-07-17T14:06:32.903 回答
0

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

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

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

顺便说一句,在我们的项目中,我们推出了自己的验证器,在IsValid()方法中使用了正则表达式模式匹配器。然后,我们通过该方法将其连接到regexJQuery中现有的验证器适配器。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;
}
于 2013-07-17T19:39:30.180 回答