我有与添加的非侵入式JavaScript验证ValidationMessageFor控制两个日期字段的简单示意图。
我的问题是我不断收到告诉我的日期是无效的,当它在正确的格式(DD / MM / YYYY)
我已经添加<globalization culture="en-GB" uiCulture="en-GB"/>
到我的web.config,并且也包括[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
每个DateTime的属性,但它仍然不会接受英国格式的日期。
有什么明显的,我在这里失踪?
其实你只需要重载日期不显眼的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你的答案伴侣。
为了完整起见,我写了关于如何所有的部分(模型,视图,自定义EditorTemplate,jQuery包含并添加博赫丹的解决方案)整合博客文章。
你可以在这里阅读: http://www.kestrelblackmore.com/blog/jquery-datepicker-mvc4
我知道这是旧的,但使用这个我添加到输入当前日期格式的属性(这是我从ASP MVC代码获取与CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern.ToLower())。
然后,我重写了JavaScript的使用在属性中找到的格式进行验证。
var format = "mm/dd/yyyy";
if (element.attributes["data-format"]) {
format = element.attributes["data-format"].value;
}
我也看到了jQuery UI的日期选择器相同的属性。 这可能不是有用的,但它可以保持格式至少与文化背景相一致。 虽然它可以帮助别人
我已经采取了不同的方法来解决这个相对于其他的答案。 使用jQuery添加新的日期功能,这将迫使日期使用当前本土文化在应用程序中设置。
$.validator.addMethod('date', function (value, element) {
var d = new Date();
return this.optional(element) || !/Invalid|NaN/.test(new Date(d.toLocaleDateString(value)));
});
也就是说,如果它失败的jQuery验证。 我的信用这个答案埃尔顿·斯通曼后可以读取这里
希望这会帮助别人。
尝试在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));