我的模型属性如下:
[DisplayName("Manufactured Date")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime? DateManufactured { get; set; }
在我的基架 MVC Core 视图中,我有以下代码来显示该值:
<input asp-for="LiftingItem.DateManufactured" class="form-control" />
在 Chrome 中,输入显示文本"dd/mm/yyyy",我收到错误:
指定的值"09/02/2006"不符合要求 格式,"yyyy-MM-dd"。
而在IE中,我得到实际日期(例如"09/02/2006")。 我认为这种差异是因为 Chrome 使用的是 HTML 5 日期类型输入,因此需要"yyyy-MM-dd"格式的格式才能显示它?
如果我删除DisplayFormat
属性,果然它在 Chrome 中有效,但在 IE 中日期格式错误("yyyy-MM-dd"而不是"dd/mm/yyyy")。
那么,似乎使用非"yyyy-MM-dd"格式的DisplayFormat
会阻止标记助手工作? 有没有办法让它在 HTML 5 兼容和较旧的浏览器上都能很好地工作?
PS:我也尝试在视图中应用格式,而不是使用asp-format="{0:dd/MM/yyyy}
,如此问题中所述,但这也阻止了它在Chrome中的工作。
编辑:我也可以删除[DataType(DataType.Date)]
,但是我没有在HTML5兼容的浏览器上获得内置的日期选择器,我绝对希望在移动设备上这样做。
是的,您可以将标签帮助程序与 DisplayFormat 数据注释结合使用。
所以,似乎将 DisplayFormat 与非"yyyy-MM-dd"格式一起使用会阻止标记助手工作?有没有办法让它在 HTML 5 兼容和较旧的浏览器上都能很好地工作?
只需从模型中删除[DataType(DataType.Date)]
,DisplayFormat(..)
语句将按预期开始工作。
PS:我也尝试使用asp-format="{0:dd/MM/yyyy}在视图中应用格式,如此问题中所述,但这也阻止了它在Chrome中的工作。
如果在特定视图中需要与模型中指定的日期格式不同的日期格式,则可以将DisplayFormat(..)
数据注释与asp-format
标记帮助程序结合使用。
如果模型中具有以下属性:
[DisplayName("Manufactured Date")]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime? DateManufactured { get; set; }
以及具有以下代码行的视图(例如详细信息视图):
@Html.DisplayFor(model => model.DateManufactured)
然后,您的应用程序将显示具有与数据注释指定的格式相对应的格式的日期,即{0:dd/MM/yyyy}
.下面是一个示例:23/02/2017
.
如果您在另一个视图(例如编辑视图)中添加以下代码行(请注意,我在月份格式中添加了"M"):
<input asp-for="LiftingItem.DateManufactured" asp-format="{0:dd/MMM/yyyy}" class="form-control" />
然后,asp-format
将优先于模型的数据表示法,应用程序用户可以在输入框中键入如下所示的日期:23/Feb/2017
。