使用jQuery datepicker插件选择数据范围,将剃须刀表单显示为两个日期字段作为文本框。开始日期工作正常,但结束日期未通过验证,并说"字段结束日期必须是日期。"下面是Model代码和.cshtml代码:
[Display(Name = "Start Date")]
public Nullable<DateTime> startDate { get; set; }
[Display(Name = "End Date")]
public Nullable<DateTime> endDate { get; set; }
<div id="dvDateRange">
@Html.TextBoxFor(e => e.startDate, new { @class = "datepicker", Value = Model.startDate.Value.ToString("dd/MM/yyyy") })
<span> to </span>
@Html.TextBoxFor(e => e.endDate, new { @class = "datepicker", Value = Model.endDate.Value.ToString("dd/MM/yyyy") })
</div>
两者的设置完全相同,为什么开始日期成功,结束日期失败?
有什么想法吗?
修改
因此肯定是一个文化问题,似乎是导致问题的Chrome。 做了以下修改并仍然遇到同样的问题。
型号代码:
[Display(Name = "Start Date")]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public Nullable<DateTime> startDate { get; set; }
[Display(Name = "End Date")]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public Nullable<DateTime> endDate { get; set; }
.cshtml代码:
<div id="dvDateRange">
@Html.EditorFor(e => e.startDate, new { @class = "datepicker", Value = Model.startDate.Value.ToString("dd/MM/yyyy") })
<span> to </span>
@Html.EditorFor(e => e.endDate, new { @class = "datepicker", Value = Model.endDate.Value.ToString("dd/MM/yyyy") })
</div>
Datepicker代码:
$("#dvDateRange input").datepicker({
showOn: "button",
buttonImage: "/Images/calendar.gif",
buttonImageOnly: true,
dateFormat: "dd/mm/yy"
});
无论如何都要在Chrome中覆盖文化设置?
答案 0 :(得分:1)
为什么不使用
[Display(Name = "Start Date")]
public DateTime? startDate { get; set; }
代替?
答案 1 :(得分:0)
最后使用Asp.net MVC set validation date format fails on Chrome
中的代码设法完成了这项工作 $.validator.addMethod('date',
function (value, element, params) {
if (this.optional(element)) {
return true;
}
var ok = true;
try {
$.datepicker.parseDate('dd/mm/yy', value);
}
catch (err) {
ok = false;
}
return ok;
});