不显眼的验证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代码),像魅力一样工作。