【问题标题】:custom validator MVC + validation client side自定义验证器 MVC + 验证客户端
【发布时间】:2013-07-17 13:53:07
【问题描述】:

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

}

如何进行客户端验证??

【问题讨论】:

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


    【解决方案1】:
    1. 在您的属性中实现 IClientValidatable。

      公共类 FirstNameValidator : ValidationAttribute, IClientValidatable

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      顺便说一句,在我们的项目中,我们推出了自己的验证器,在 IsValid() 方法中使用了正则表达式模式匹配器。然后,我们通过 IClientValidatable 方法将其连接到 JQuery 中现有的 regex 验证器适配器。我们这样做是为了控制所使用的错误消息。

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

      【讨论】:

        猜你喜欢
        • 2014-03-19
        • 1970-01-01
        • 1970-01-01
        • 2015-12-04
        • 1970-01-01
        • 2017-05-03
        • 1970-01-01
        • 1970-01-01
        • 2013-11-12
        相关资源
        最近更新 更多