我有一个input
元素由以下Razor代码呈现:
@Html.TextBoxFor(model => model.DateOfBirth, "{0:dd/MM/yyyy}", new { @class = "datepicker" })
@Html.ValidationMessageFor(model => model.DateOfBirth, "", new { @class = "text-danger" })
DateOfBirth
属性的类型为DateTime?
。然后我有代码使类datepicker
的元素充当日期选择器:
<script>
$(function () {
$(".datepicker").datepicker({
dateFormat: "dd/mm/yy",
changeYear: true,
showOn: "button"
}).next("button").button({
icons: { primary: 'ui-icon-calendar' },
label: "Select a date",
text: false
});
});
</script>
当我导航到我的视图时,我会看到默认日期和日期选择器图标,当我点击图标时,我会看到日历下拉列表。但是,当我选择日期时,通常是第一次,我收到验证错误,说明:
DateOfBirth字段必须是日期。
然后,当我选择另一个日期时,错误消失了,只是随机返回&#39;在随后的日期选择。我还没有能够缩小哪些日期会导致错误,哪些日期不会导致错误。即使我将月份和日期保持在13岁以下,也要避免潜在的问题与“dd&#39;与&#39; mm&#39;;什么可能导致这些激怒验证错误?
答案 0 :(得分:0)
您可以直接在模型中提供日期时间格式。我改变了你的代码,它对我来说很好。
<script type="text/javascript">
$(document).ready(function () {
$('.dtPicker').datepicker({
dateFormat: "dd-mm-yy",
changeYear: true,
showOn: "button"
}).next("button").button({
icons: { primary: 'ui-icon-calendar' },
label: "Select a date",
text: false
});
});
@using(Html.BeginForm("",""))
{
<fieldset>
<div>
@Html.LabelFor(model=>model.Name)
@Html.TextBoxFor(model=>model.Name)
</div>
<div>
@Html.LabelFor(model=>model.DoB)
@Html.TextBoxFor(model=>model.DoB,new {@class="dtPicker"})
</div>
<input type="submit" value="submit" />
</fieldset>
}
public class DatePick
{
[DisplayName("UserName")]
public string Name { get; set; }
[DisplayName("DateOfBirth")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime? DoB { get; set; }
}