代码改变世界

VS2012 MVC4中jquery validate的日期验证bug

2012-11-21 14:20  Bce  阅读(1044)  评论(1编辑  收藏  举报

好吧,刚发现这个问题

Model中

[Display(Name = "成立时间"), DisplayFormat(ApplyFormatInEditMode = true,DataFormatString = "{0:yyyy-MM-dd}"), DataType(DataType.Date)]
public DateTime EnterpriseEstablishDate { get; set; }

结果你会发现这样

validate 你是肿么了?

一看js就发现问题了

关于时间验证,jquery用的是这个

        // http://docs.jquery.com/Plugins/Validation/Methods/date
        date: function(value, element) {
            return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
        },

断点一调试就发现问题了,new Date('2012-3-3')竟然是NaN,我了个去.........

所以没办法,要么给date验证改成dateISO一样的模式

        // http://docs.jquery.com/Plugins/Validation/Methods/date
        date: function(value, element) {
            return this.optional(element) || /^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/.test(value);

}, // http://docs.jquery.com/Plugins/Validation/Methods/dateISO dateISO: function(value, element) { return this.optional(element) || /^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/.test(value); },

要么利用js加载顺序,盖掉date验证方法

// 存成一个js档,放在jquery.validate.js 之后加载
jQuery.validator.methods.date = function (value, element) {
    return this.optional(element) || (/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value));
}

鞠躬撒花