@if (Model.RecDateFrom.HasValue)
{
@Html.EditorFor(model => model.RecDateFrom,
new {htmlAttributes =
new {@Value = Model.RecDateFrom.Value.ToString("yyyy-MM-dd"),
@class = "form-control input-sm small-input-fix"}})
}
else
{
@Html.EditorFor(model => model.RecDateFrom,
new {htmlAttributes = new {@class = "form-control input-sm small-input-fix"}})
}
@Html.ValidationMessageFor(model => model.RecDateFrom, "", new {@class = "text-danger"})
您可以在上面看到如果在设置值之前datetime为null,我必须如何处理。我必须设置该值,因为MVC使用不正确的日期输入格式,因此chrome没有正确的默认值。
我不想在this question中使用已接受的解决方案,因为这也会改变显示的格式。
我尝试过使用编辑器模板,但似乎你必须从头开始,而不是为Date数据类型扩展内置的编辑器模板(这似乎是MVC的一个大缺陷,除非我遗漏了一些东西)
答案 0 :(得分:2)
如果您想要渲染浏览器HTML5 datepicker,您只需要将正确的属性应用于您的属性。请注意,格式字符串必须是ISO格式。
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime RecDateFrom { get; set; }
然后在视图中
@Html.EditorFor(m => m.RecDateFrom, new { htmlAttributes = new { @class = "form-control input-sm small-input-fix" } })
附注:旧版浏览器不支持HTML5日期选择器,FireFox中根本不支持HTML5日期选择器,因此使用jquery插件可能更好(至少在短期内)(并在插件初始化程序中设置格式) )。例如,使用jquery ui datepicker - $('#datepicker').datepicker({ dateFormat: 'dd-mm-yy' })