客户端自定义验证mvc4中的日期范围

时间:2015-10-09 09:38:56

标签: c# jquery validation asp.net-mvc-4

我正在尝试验证年龄超过18岁,这是在服务器端验证,但它不在客户端工作,我不知道如何做到这一点。 我看过文章,但它没有用。

  1. 我在服务器端C#中实现了逻辑。
  2. 我是否需要在客户端jQuery / JavaScript中实现相同的逻辑。
  3. 我的后端代码是

      public class ValidateAge : ValidationAttribute
    {
        public ValidateAge( params string[] propertyNames)
        {
            this.PropertyNames = propertyNames;
        }
    
    
        public string[] PropertyNames { get; private set; }
        public int MinLength { get; private set; }
    
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            DateTime date = Convert.ToDateTime(value, System.Globalization.CultureInfo.InvariantCulture);
            if (DateTime.Compare(date, DateTime.Now.AddYears(-18)) == -1 || DateTime.Compare(date, DateTime.Now.AddYears(-18)) == 0)
            {
                return ValidationResult.Success;
            }
            else
            {
                return new ValidationResult(this.FormatErrorMessage(validationContext.DisplayName));
            }
    
    
        }
    }
    

    在模型中是这个

    [Required(ErrorMessage="Date of birth is required.")]
      [ValidateAge(ErrorMessage="Age must be above 18.")]
      [DataType(DataType.Date)]
      public DateTime _Dob { get; set; }
    

    它是验证模型但不显示服务器端或客户端的错误消息,我试过

    jQuery.validator.unobtrusive.adapters.add but no one explained how to use it 
     i dont know how to make it work 
    

    感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您也可以使用此链接http://www.c-sharpcorner.com/UploadFile/d87001/remote-validation-in-mvc/来使用远程验证。

OR

您可以使用此Javascript功能在按钮单击时进行日期验证。

 Date.prototype.age = function (at) {
        var value = new Date(this.getTime());
        var age = at.getFullYear() - value.getFullYear();
        value = value.setFullYear(at.getFullYear());
        if (at < value)--age;
        return age;
    };

var dob = new Date(Date.parse($(this).text()));

if (dob.age(new Date()) < 18) {
  $(this).text("Under 18");
}
else {
   $(this).text(" Over 18");
}