不引人注目的验证Javascript

时间:2013-10-24 23:52:39

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

我第一次尝试编写自己的验证脚本。我已经完成了几个教程,我已经让它们正常工作,现在试图从头开始理解它背后的逻辑,这是我自定义的:

属性:

[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")

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

提前致谢!

1 个答案:

答案 0 :(得分:0)

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