字段DateTime必须是日期。
我在MVC项目中使用Kendo网格。我有相同应用程序的法语和英语版本。以下是我在_Layout.cshtml文件中的操作:
<script>
if ("@Session["Culture"]" === "en-CA") {
kendo.culture("en-US");
Globalize.culture('en-CA');
} else {
kendo.culture("fr-CA");
Globalize.culture('fr-CA');
}
$.validator.methods.number = function (value, element) {
return this.optional(element) || !isNaN(Globalize.parseFloat(value));
}
$.validator.methods.date = function (value, element) {
if (this.optional(element))
return true;
var result = Globalize.parseDate(value, "@LCL.Common_Formats.DatePickerFormat", "@Session["Culture"]");
return !isNaN(result) && (result != null);
}
$.validator.methods.min = function (value, element, param) {
return this.optional(element) || Globalize.parseFloat(value) >= param;
}
$.validator.methods.max = function (value, element, param) {
return this.optional(element) || Globalize.parseFloat(value) <= param;
}
$.validator.methods.range = function (value, element, param) {
if (this.optional(element))
return true;
var result = Globalize.parseFloat(value);
return (result >= param[0] && result <= param[1]);
}
</script>
在网格中我有一个日期选择器,如下所示:
c.Bound(u => u.DateTime)
.Title(LCL.Common_Labels.PurchaseDate)
.Format("{0:" + LCL.Common_Formats.DatePickerFormat + "}")
.Width(smlColumn);
LCL.Common_Formats.DatePickerFormat是Resources文件中用于存储datepicker格式的条目。我有英文和法文资源文件。我的问题是,我得到了这个奇怪的例外: 字段DateTime必须是日期 在法语版本中编辑记录时。
但它在英文版中效果很好......
答案 0 :(得分:0)
那些日期格式......
我的格式有类似的问题。我可以建议你:
使用配置获取kendo验证器的实例:
var kendoValudator = $('#yourFormId').kendoValidator({
rules: {
mvcdate: function (e) {
if (e.is('[data-role="datepicker"]')) {
var result = kendo.parseDate($(e).val(), 'dd/MM/yyyy');
return !!result;
}
return true;
}
}).data('kendoValidator');
此外,如果您在页面上使用jQuery,请尝试添加:
jQuery.extend(jQuery.validator.methods, {
date: function (value, element) {
if ($(element).is('[data-role="datepicker"]')) {
var res = this.optional(element) || kendo.parseDate(value, "dd/MM/yyyy") != null;
return !!res;
}
return true;
}
});
然后,如果您的服务器收到默认日期(01/01/0001),您应该更改服务器文化。
示例:
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");
我希望它有所帮助。
答案 1 :(得分:0)
我找到了最佳解决方案:
var culture = kendo.culture();
if (culture.name === "fr-CA")
{
culture.calendar.patterns.F = "dd/MM/yyyy";
}
else
{
culture.calendar.patterns.F = "MM/dd/yyyy";
}
必须在document.ready()
部分添加。
我花了3天时间找到解决方案......