Asp.net mvc 4 剑道日期选择器格式验证和错误消息
我正在创建一个页面,该页面具有dd/MM/yyyy格式的日期选择器和区域性ar SA,但当我尝试设置日期时,它总是返回无效的日期 这是日期选择器Asp.net mvc 4 剑道日期选择器格式验证和错误消息,asp.net-mvc-4,datepicker,kendo-ui,Asp.net Mvc 4,Datepicker,Kendo Ui,我正在创建一个页面,该页面具有dd/MM/yyyy格式的日期选择器和区域性ar SA,但当我尝试设置日期时,它总是返回无效的日期 这是日期选择器 @Html.Kendo().DatePickerFor(model => model.ValidStartDate).HtmlAttributes(new { id = "ValidStartDate_" + Model.ItemCode }).Culture("ar-SA").Format("dd/MM/yyyy").ParseFormats(
@Html.Kendo().DatePickerFor(model => model.ValidStartDate).HtmlAttributes(new { id = "ValidStartDate_" + Model.ItemCode }).Culture("ar-SA").Format("dd/MM/yyyy").ParseFormats(new string[] {"dd/MM/yyyy"})
另一个问题是验证消息,它总是返回默认消息,而不是我在视图模型中设置的自定义消息
[Date( ErrorMessageResourceType = typeof(Global), ErrorMessageResourceName = "ValidStartDate_InvalidDate")]
public Nullable<System.DateTime> ValidStartDateH { get; set; }
[日期(ErrorMessageResourceType=typeof(全局),ErrorMessageResourceName=“ValidStartDate\u InvalidDate”)]
公共可为空的ValidStartDateH{get;set;}
我通过在加载脚本中设置区域性来解决日期格式不正确的消息
kendo.culture("ar-SA");
但我仍然有第二个问题,即自定义文本消息仍然没有从数据注释消息返回模型:
[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; }
视图:
添加脚本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;
}
});
删除[日期(ErrorMessageResourceType=typeof(全局),ErrorMessageResourceName=“ValidStartDate\u InvalidDate”)]
然后使用这个正则表达式
[数据类型(DataType.Date)]
(0[1[1-1-9[1[1-1-9[1[1-1-9[1-1-9[1-1-1-9[2-9-2-9[2-9[2-9[2-2-9[2-2-9[2-9[2-9[2-9[2-9[2-2-9[2-2-9[2-3-3-3-3 \55 5 5 5 5 5 5 \上述上述上述上述扑扑扑扑扑扑扑扑扑扑扑扑扑扑扑扑扑扑扑扑扑扑扑扑扑扑扑扑扑扑扑扑扑扑扑扑扑扑扑扑扑上述上述上述上述上述上述上述上述上述上述上述上述上述上述)))))可能((((((((((((((\[1[1-1-1-1-1-1-1-1-1-1-1-1-1-1-9[1/02/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16 |[2468][048]|[3579][26]))$”,ErrorMessageResourceType=typeof(Object),ErrorMessageResourceName=“ValidStartDate\u InvalidDate”)
公共日期时间?释放日期{get;set;}验证在服务器或客户端失败了吗?在客户端失败了吗?酷,你尝试过不同的浏览器吗?你使用的是Kendo的Validator或JQuery吗?也许还有其他什么?我尝试过IE和chrome,结果是一样的,我用的是Kendo Validator欢迎使用stackoverflow。参观一下,了解一下这个网站是如何运行的Works以及它的用途。学习如何格式化您的答案,因为这将增加可读性。谢谢您的帮助,我将尝试一下
$(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;
}
});