不显眼的验证Javascript

问题描述:

我想第一次写我自己的验证脚本。我已经跟着几个教程,我已经得到了他们的工作,现在想从头开始了解它背后的逻辑,这是我的自定义一个:不显眼的验证Javascript

属性:

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)] 
public class DateGreaterThanTodayAttribute: ValidationAttribute, IClientValidatable 
{ 
    public DateGreaterThanTodayAttribute(): base("{0} must be greater than today") 
    { 
    } 

    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     if (value != null) 
     { 
      var valueAsDate = (DateTime)value; 

      if (valueAsDate < DateTime.Now) 
      { 
       var errorMessage = FormatErrorMessage(validationContext.DisplayName); 
       return new ValidationResult(errorMessage); 
      } 
     } 

     return ValidationResult.Success; 
    } 



    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) 
    { 
     var rule = new ModelClientValidationRule(); 
     rule.ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()); 
     rule.ValidationType = "dategreaterthantoday"; 
     rule.ValidationParameters.Add("today", DateTime.Now); 
     yield return rule; 
    } 
} 
} 

JS:

$.validator.addMethod("dategreaterthantoday", function (value, element, params) { 
if (value) { 
    var valueAsDate = Date.parse(value); 

    if (valueAsDate < Date.now) 
     return false; 
} 
return true; 
}); 
$.validator.unobtrusive.adapters.addBool("dategreaterthantoday") 

服务器端验证工作正常,但我仍然有点困惑,必须传递给客户端代码的参数,如果有人可以帮助我弄清楚为什么客户端验证不起作用,我不寻找只是一个简单的解决方案,但解释我做错了什么以及如何解决它。

在此先感谢!

简单的错误,而不是使用Date.Now,我将它更改为新的Date()(Javascript代码),像魅力一样工作。