简单的答案是不要使用自定义日期格式。只需始终明确执行 .Format("MM/dd/yyyy") 并且不要使用 "dd/MM/yyyy" ("yyyy-MM-dd" 或 "MMM d, yyyy" 可能没问题)。并在控制面板或 Web.config 中将您的 Web 服务器设置为使用美国区域设置。
现在解释问题以及如何实际使 dd/MM/yyyy 工作:
剑道日期验证使用默认的剑道文化日期格式 kendo.culture().calendar.patterns.d(和 .t 表示时间)。如果您直接设置它或应用不同的文化,则会设置验证的日期格式。它使用 kendo.parseDate 所以像“MMM d, yyyy”这样的东西会很好,但是如果 d > 12 并且正在使用默认的美国文化,像“dd/MM/yyyy”这样的东西将无法验证(请参阅 kendo Globalization demo 了解如何切换文化)。
发生这种情况的原因是因为 DatePicker.Format(...) 略有损坏。这是 kendo.aspnetmvc.js 中的一个错误,它提供了一个替代日期验证功能,它忽略 DatePicker 格式,只使用当前文化日期格式运行 parseDate。这是固定的javascript:
date: function(input) {
var dp = input.data("kendoDatePicker") || input.data("kendoDateTimePicker");
if (dp != undefined) {
return input.val() === "" || kendo.parseDate(input.val(), dp.options.format) !== null;
}
return input.val() === "" || kendo.parseDate(input.val()) !== null;
},
此外,在 kendo.validator.js/kendo.web.js 中的日期验证器函数中存在一个小错误,这使得 Internet Explorer 中网格上的日期验证总是失败。
此外,确保您的网络服务器全球化设置为美国以匹配剑道文化(在 Web.config 或 Windows 区域控制面板中)。Firefox 发布 MM/dd/yyyy 并且网络服务器需要匹配它。此外,如果您未明确指定 DatePicker.Format,则 Web 服务器区域日期格式将应用于所有客户端浏览器。因此,如果您的 Web 服务器在 Windows 的控制面板中设置了加拿大/英国日期格式,则 kendo 网格 DatePickers 默认为 dd/MM/yyyy,然后在验证中出错,并且当 firefox 发布到 Web 服务器时再次出错(firefox 发布下的 kendo 默认文化MM/dd/yyyy 因此,如果您的 Web 服务器需要 dd/MM/yyyy,mvc 日期绑定失败)。
注意:如果您更喜欢使用非 mvc 日期验证器:删除 data-val-date 属性。添加:数据类型=\"日期\" 数据格式=\"dd/MM/yyyy h:mm:ss tt\"。我相信这是不可能使用 html 帮助程序的。您必须直接指定 html 和 javascript。
注意:由于缺少“data-val-date”属性,非网格 DatePickers 似乎没有验证。
另外:“请记住,KendoUI 首先使用 parseFormats 选项来解析日期,然后将其转换为格式选项,最后运行验证。这就是为什么我在验证中使用 yyyy-MM-dd 而不是 ["MM/dd/yyyy", " dd/MM/yyyy"]。" -如何使用剑道验证器验证日期格式为 yyyy-MM-dd?
Web.config 的全球化行:
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="en-US" uiCulture="en-US" />