C# 对于可为空的日期时间,使用editorfor的更优雅的方法是什么

C# 对于可为空的日期时间,使用editorfor的更优雅的方法是什么,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,您可以在上面看到我如何在设置值之前处理datetime是否为null。我必须设置该值,因为MVC对日期输入使用了不正确的格式,因此chrome没有正确的默认值 我不想在中使用接受的解决方案,因为这也会更改的显示格式 我尝试过使用编辑器模板,但似乎你必须从头开始,而不是扩展日期数据类型的内置编辑器模板(这似乎是MVC的一个大缺陷,除非我遗漏了什么)。如果你想呈现浏览器HTML5 datepicker,您只需要将正确的属性应用于您的属性。注意:格式字符串必须为ISO格式 @if (Model.Rec

您可以在上面看到我如何在设置值之前处理datetime是否为null。我必须设置该值,因为MVC对日期输入使用了不正确的格式,因此chrome没有正确的默认值

我不想在中使用接受的解决方案,因为这也会更改的显示格式


我尝试过使用编辑器模板,但似乎你必须从头开始,而不是扩展日期数据类型的内置编辑器模板(这似乎是MVC的一个大缺陷,除非我遗漏了什么)。

如果你想呈现浏览器HTML5 datepicker,您只需要将正确的属性应用于您的属性。注意:格式字符串必须为ISO格式

@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"})
然后在视图中

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime RecDateFrom { get; set; }

旁注:HTML5日期选择器在旧浏览器中不受支持,在FireFox中也不受支持,因此最好(至少在短期内)使用jquery插件(并在插件初始值设定项中设置格式)。例如,使用jquery ui datepicker-
$(“#datepicker”).datepicker({dateFormat:'dd-mm-yy'})

是否要呈现浏览器HTML5 datepicker?如果更干净的话,我可能会使用不同的日期选择器,但我认为HTML5日期选择器将是最简单的方法。好的,通过这样做,我会很快给出答案,当我在某个日期使用
Html.DisplayFor
时,它将以yyyy-MM-dd格式打印出来,这是我不想要的。也许我应该创建一个EditFormat属性?不,像往常一样,您应该使用视图模型来表示要显示/编辑的内容。对于一个简单的显示页面,可能并不总是必需的,但您应该始终将其用于编辑视图(然后您可以对编辑视图模型和显示模型应用不同的属性)。DisplayFormat属性属性应该是ApplyFormatInEditMode,而不是ApplyInEditMode。@John81,谢谢:)
@Html.EditorFor(m => m.RecDateFrom, new { htmlAttributes = new { @class = "form-control input-sm small-input-fix" } })