c# - ASP.NET MVC 为编辑和显示模式应用不同的 DisplayFormat

标签 c# asp.net-mvc html date

问题

我正在运行 tutorials for ASP.NET MVC 4 (但我认为这也适用于 MVC 5),您可以在其中为电影商店创建一个网站。

电影模型有一个类型为 DateTime 的 ReleaseDate 属性。 通常这个日期被查看的次数多于被编辑的次数,因此我应用了以下属性来很好地呈现它。

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd-MMM-yyyy}")]
public DateTime ReleaseDate { get; set; }

显示此日期的 View 使用以下方式呈现它时:

@Html.DisplayFor(model => model.ReleaseDate)

如您所料,它的显示格式很好:

Nicely formatted dates

但是,当编辑此日期的 View 使用以下方式呈现它时:

@Html.EditorFor(model => model.ReleaseDate)

它显示了一个可爱的 HTML5 日期选择器,但没有填写值,因为日期格式错误(错误消息是 The specified value '11/01/1989 00:00:00' does not符合要求的格式,'yyyy-MM-dd'。 这是一个问题,因为如果用户想要编辑一个条目,控件中的日期永远不会被设置,所以用户将不知道以前/当前的值是什么。

enter image description here

折衷方案

我从阅读其他类似问题中找到的解决方案是将模型中的 DisplayFormat 设置为 yyyy-MM-dd 并且 make 适用于编辑控件:

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

这是可行的,因为它会在编辑期间自动填充 HTML5 日期选择器的值(使用 @Html.EditorFor()):

enter image description here

但是当我显示时(使用 `@Html.DisplayFor()),我坚持使用丑陋的 ISO 格式日期:

enter image description here

真正的问题

我真正的问题是:我可以在模型中设置正常显示和编辑模式的不同显示格式吗?

  • 我不想使用文本框来编辑日期 - 我想使用 HTML5 日期选择器;这比使用文本框好得多。
  • 我也不想更改所有显示日期的 View 以直接从模型中获取属性并使用自定义格式对其进行格式化,这有点否定了 DisplayFormat 属性的意义。 (我想用@Html.DisplayFor来显示,用@Html.EditorFor来编辑)

编辑

我想要实现的是这样的:

[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; }

但是一个属性不能有两个显示格式属性。

最佳答案

为方法 TextBoxFor 使用格式参数并覆盖类型属性:

@Html.TextBoxFor(m => m.ReleaseDate, "{0:yyyy-MM-dd}", htmlAttributes: new { @type="date" })

关于c# - ASP.NET MVC 为编辑和显示模式应用不同的 DisplayFormat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31993584/

相关文章:

asp.net - 在 App_Start 中编辑 MiniProfiler.cs 后更新 MiniProfiler.MVC3 NuGet 包

c# - 无法访问 FHIR 模型中的 Procedure.reason

html - 左侧 div 具有固定宽度,右侧 div 具有可变宽度

jQuery 不适用于多个 div 类

javascript - 如何创建C#删除确认框

c# - 教程 usercontrol with flipview/carousel on a timer XAML WinRT apps

c# - 更改 ASP.NET 标识消息

c# - 如何从一个逗号分隔的列表中填充两个单独的数组?

c# - 企业库记录 block 滚动平面文件不写入文件

javascript - 将 Morris.js 图表导出为 PDF?