我正在浏览tutorials for ASP.NET MVC 4(但我认为这也适用于MVC 5),您可以在其中为电影商店创建网站。
电影模型具有DateTime类型的ReleaseDate属性。 通常,这个日期的查看次数会比编辑的日期多,所以我应用了以下属性来很好地渲染它。
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd-MMM-yyyy}")]
public DateTime ReleaseDate { get; set; }
当显示的视图时,此日期会使用以下内容呈现:
@Html.DisplayFor(model => model.ReleaseDate)
它显示格式正确,正如您所期望的那样:
但是,当编辑的视图时,此日期会使用以下内容进行渲染:
@Html.EditorFor(model => model.ReleaseDate)
它显示了一个可爱的HTML5日期选择器,但没有填写该值,因为日期格式错误(错误消息为The specified value '11/01/1989 00:00:00' does not conform to the required format, 'yyyy-MM-dd'.
这是一个问题,因为如果用户想要编辑条目,则控件的日期永远不会被设置,因此用户将不知道前一个/当前值是什么。
我通过阅读其他类似问题找到的解决方案是将模型中的DisplayFormat设置为yyyy-MM-dd,make适用于编辑控件:
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime ReleaseDate { get; set; }
这是有效的,因为它会在编辑期间自动填充HTML5日期/检索器的值(使用@Html.EditorFor())
:
但是当我正在显示(使用`@ Html.DisplayFor())时,我会遇到丑陋的ISO格式日期:
我真正的问题是:我可以在模型中设置正常显示和编辑模式的不同显示格式吗?
@Html.DisplayFor
进行展示,@Html.EditorFor
进行编辑)我希望一切都有意义 - 我是asp.net的新手,所以不完全熟悉这些控件和属性。
我想要实现的是这样的:
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] // use this format for edit controls
[DisplayFormat(DataFormatString = "{0:dd-MMM-yyyy}", ApplyFormatInEditMode = false)] // use this format for display controls
public DateTime ReleaseDate { get; set; }
但是一个属性不能有两个显示格式属性。
答案 0 :(得分:10)
对方法TextBoxFor使用format参数并覆盖type属性:
@Html.TextBoxFor(m => m.ReleaseDate, "{0:yyyy-MM-dd}", htmlAttributes: new { @type="date" })