我的模型属性如下:
[DisplayName("Manufactured Date")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime? DateManufactured { get; set; }
在我的脚手架MVC核心视图中,我有这段代码来显示该值:
<input asp-for="LiftingItem.DateManufactured" class="form-control" />
在Chrome中,输入显示文字&#34; dd / mm / yyyy&#34;我收到错误:
指定值&#34; 09/02/2006&#34;不符合要求 格式,&#34; yyyy-MM-dd&#34;。
在IE中,我获得了实际日期(例如&#34; 09/02 / 2006&#34;)。我认为这种差异是因为Chrome正在使用HTML 5日期类型输入,因此需要格式为&#34; yyyy-MM-dd&#34;格式显示它?
如果我删除DisplayFormat
属性,确定它在Chrome中有效,但在IE中日期格式错误(&#34; yyyy-MM-dd&#34;而不是&#34峰; dd /月/年&#34)。
所以,似乎使用DisplayFormat
与非&#34; yyyy-MM-dd&#34;格式是否阻止Tag Helpers工作?有没有什么方法可以让它兼容HTML 5和旧版浏览器?
PS:我还尝试使用asp-format="{0:dd/MM/yyyy}
as described in this question在视图中应用格式,但这也会阻止它在Chrome中运行。
修改:我也可以删除[DataType(DataType.Date)]
,但我不会在兼容HTML5的浏览器上获得内置的日期选择器,我绝对希望在移动设备上使用。
答案 0 :(得分:1)
是的,您可以将Tag Helpers与DisplayFormat数据注释结合使用。
因此,似乎使用DisplayFormat与非&#34; yyyy-MM-dd&#34;格式是否阻止Tag Helpers工作?有没有什么方法可以让它兼容HTML 5和旧版浏览器?
只需从模型中删除[DataType(DataType.Date)]
,DisplayFormat(..)
语句就会按预期开始工作。
PS:我还尝试在视图中应用格式,而不是使用asp-format =&#34; {0:dd / MM / yyyy} as described in this question,但这也阻止了它的工作铬。
如果您需要在特定视图中使用与模型中指定的日期格式不同的日期格式,则可以将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
。
如果你在另一个视图(例如编辑视图)中添加以下代码行(请注意我已经在月份格式中添加了&#39; M&#39;)
<input asp-for="LiftingItem.DateManufactured" asp-format="{0:dd/MMM/yyyy}" class="form-control" />
然后asp-format
将优先于模型的数据表示法,您的应用程序用户可以在输入框中输入类似这样的日期:23/Feb/2017
。