代码改变世界

VS2012 MVC4中jquery validate的日期验证bug

  Bce  阅读(1050)  评论(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));
}

鞠躬撒花

 

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示