我使用的是剑道的DatePicker编辑日期字段在我的ASP.NET MVC 4项目被显示在剑道电网。 为了拥有的DatePicker正在使用的日期字段使用自定义日期格式字符串,我更新了Date.cshtml
下文件EditorTemplates
文件夹下面的:
@(Html.Kendo().DatePickerFor(m => m).Format("dd/MM/yyyy"))
通过这样做,我设法有DatePicker的显示格式,我想它。 然而,无论是通过从弹出日历中手动键或选择一些输入输入日期的验证失败。
经进一步调查,我可以说的DatePicker验证是基于一个日期M/d/Y
格式。 这种假设是基于我的书院是2012年12月1日是一个有效的日期作出,而13/1/2012不是。
我也尝试添加.ParseFormat("dd/MM/yyyy")
在申报的DatePicker的最后Date.cshtml
但它不解决任何事情。 所以,我要说,这绝对是一个错误,以后我会将此情况报告给Telerik的。
但就目前而言,我正在寻找的解决方法,有这方面的工作。 我发现我可以重写kendo.ui.validator.rules.mvcdate
在Javascript中有我自己的验证功能。 虽然在Chrome这项工作很好,它不会在IE9工作。
因此,任何想法如何,我可以做的DatePicker接受dd/MM/yyyy
输入格式? 提前致谢。
在内部,用于ASP.NET MVC(不显眼的客户端验证)的时间验证规则,使用kendo.parseDate(字符串)方法,它在内部将使用预定义的日期型态如果没有格式/ s是被定义/。 我想,在你的情况下,默认的文化是“EN-US”,这就是为什么验证失败,因为与“DD / MM / YYYY”格式的日期被视为无效。 一个可能的解决方案是重写的日期验证规则(像你一样),并使用特定的格式解析字符串。 另一种选择是,为页面设置差异区域性设置。 例如,对于“去DE”文化短日期格式是“DD / MM / YYYY”。
我用这个方法,它工作正常..
在页面中添加以下两行..
<script src="@Url.Content("~/Scripts/jquery.validate.js")"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")"></script>
然后覆盖了jQuery日期验证方法..
<script>
$(document).ready(function () {
kendo.culture("en-MY"); //your culture
$.validator.addMethod('date',
function (value, element) {
return this.optional(element) || kendo.parseDate(value)
});
});
</script>
与此同时,在我Web.config
我有这个...
<system.web>
<globalization uiCulture="en-MY" culture="en-MY"></globalization>
</system.web>
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
[Required(ErrorMessage = "Pick a date from Kendo Date Picker")]
public DateTime mydate{ get; set; }
@(Html.Kendo().DatePickerFor(m=>m.mydate)
.Name("MyDate")
.Format("dd/MM/yyyy")
.ParseFormats(new string[] {"dd/MM/yyyy"}))
/ 添加脚本的document.ready功能 /
$(document).ready(function () { kendo.culture("en-GB");
$.validator.methods['date'] = function (value, element) {
var check = false;
var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/;
if (re.test(value)) {
var adata = value.split('/');
var dd = parseInt(adata[0], 10);
var mm = parseInt(adata[1], 10);
var yyyy = parseInt(adata[2], 10);
var xdata = new Date(yyyy, (mm - 1), dd);
if ((xdata.getFullYear() == yyyy) && (xdata.getMonth() == (mm - 1)) &&
(xdata.getDate() == dd)) {
check = true;
}
else {
alert(value);
check = false;
}
} else
check = false;
return this.optional(element) || check;
}
});
我改了日期的验证规则:
$.validator.methods.date = function (value, element) {
return this.optional(element) || /^\d\d?-\w\w\w-\d\d\d\d/.test(value);
};
我的格式是比你的略有不同,但你应该可以对此进行修改。
我用甘特组件时有同样的问题在这里 。 Telerik的支持,把我放在右边线参照我在这里 。
我的关键遗漏的是,我没有列入我_Layout.vbhtml文件如下:
<script>
kendo.culture("en-GB");
</script>
一旦(在我的JS束适当kendo.culture脚本一起)包括助手开始表现如预期。
简单的答案是不使用自定义日期格式。 只要始终做到.Format( “MM / DD / YYYY”)明确,并且不使用 “DD / MM / YYYY”( “YYYY-MM-DD” 或 “MMM d,YYYY” 可能是好的)。 和设置您的Web服务器使用美国区域设置在控制面板或在Web.config中。
现在的问题的解释,以及如何真正让DD / MM / YYYY工作:
剑道日期验证使用默认的剑道文化的日期格式kendo.culture()。calendar.patterns.d(和.T时间)。 如果设置了此直接或应用不同的文化,即对设定被验证的日期格式。 它采用kendo.parseDate所以像“MMM d,YYYY”将被罚款,但像“DD / MM / YYYY”将无法通过验证,如果D> 12,默认美国文化正在使用(请参阅如何剑道全球化演示切换培养物)。
之所以出现这种情况是因为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服务器的全球化设置为美国匹配剑道文化(在Web.config中或在Windows区域控制面板)。 Firefox的职位MM / DD / YYYY和Web服务器需要与之相匹配的。 此外,Web服务器区域日期格式适用于所有客户端浏览器,如果你没有明确指定DatePicker.Format。 所以,如果你的Web服务器有加拿大/英国的日期格式在控制面板的Windows设置,剑道电网DatePickers默认为DD / MM / YYYY然后在验证错误,并再次当Firefox的帖子到Web服务器(Firefox下的帖子剑道默认文化MM / DD / YYYY,所以如果你的Web服务器预计DD / MM / YYYY,MVC日期绑定失败)。
注意:如果你喜欢使用非MVC日期验证:删除数据-VAL-date属性。 添加:数据类型= \ “日期\” 数据格式= \ “DD / MM / YYYY H:MM:SS TT \”。 我相信这个使用HTML帮助是不可能的。 你必须直接指定的HTML和JavaScript。
注:非并网DatePickers似乎没有确认,由于缺乏“数据-VAL-日期”的属性。
又道:“记住,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" />