我有一个带有两个日期字段的简单视图,其中为不显眼的JavaScript验证添加了ValidationMessageFor控件。
我的问题是我一直被告知我的日期无效,格式正确(日/月/日)
我已将<globalization culture="en-GB" uiCulture="en-GB"/>
添加到我的web.config中,并且还在每个DateTime属性中包含[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
,但它仍然不接受英国格式的日期。
这里有什么明显的遗失吗?
答案 0 :(得分:100)
实际上,您只需要为日期
重载不显眼的JavaScript验证方法jQuery(function ($) {
$.validator.addMethod('date',
function (value, element) {
if (this.optional(element)) {
return true;
}
var ok = true;
try {
$.datepicker.parseDate('dd/mm/yy', value);
}
catch (err) {
ok = false;
}
return ok;
});
});
答案 1 :(得分:12)
Bohdan的例子很有用!我给你的答案队友+1了。
为了完整起见,我写了一篇关于如何集成所有部分的博客文章(模型,视图,自定义EditorTemplate,jQuery包含和添加Bohdan的解决方案)。
您可以在此处阅读:http://www.kestrelblackmore.com/blog/jquery-datepicker-mvc4
答案 2 :(得分:4)
我知道它已经老了但是使用了这个,我在输入中添加了一个具有当前日期格式的属性(我从带有CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern.ToLower()的ASP MVC代码中获取了该属性。
然后我重写了验证javascript以使用属性中找到的格式。
var format = "mm/dd/yyyy";
if (element.attributes["data-format"]) {
format = element.attributes["data-format"].value;
}
我还读取了jquery ui datepicker的相同属性。它可能没那么有用,但它至少可以保持格式与文化一致。虽然它可以帮助某人
答案 3 :(得分:3)
与其他答案相比,我采取了不同的方法来解决这个问题。使用jQuery添加一个新的日期函数,该函数将强制日期使用应用程序中的当前本地文化集。
$.validator.addMethod('date', function (value, element) {
var d = new Date();
return this.optional(element) || !/Invalid|NaN/.test(new Date(d.toLocaleDateString(value)));
});
即如果它在jQuery验证上失败了。我将这个答案归功于埃尔顿斯通曼的帖子,可以阅读here
希望这会帮助别人。
答案 4 :(得分:1)
尝试在jquery.validate.js中直接更改此内容。使用$ .datpicker
date: function (value, element) {
var s = value;
var ind2 = 3;
var ind3 = 6;
var ind4 = 4;
if (s.substr(6, 1) != "2") {
ind2 = ind2 + 1;
ind3 = ind3 + 1;
ind4 = ind4 + 1;
}
var ndan = s.substr(0, 2);
var nmje = s.substr(ind2, 2);
var ngod = s.substr(ind3, ind4);
var ns = ngod + "," + nmje + "," + ndan;
return this.optional(element) || !/Invalid|NaN/.test(new Date(ns));