在 Asp.Net Core 2.0 中开发 MVC 应用程序时,我一直在努力解决这个问题。对于所有浏览器,似乎真的没有一个完美的解决方案。
上面 erdinger 提供的解决方案没有解决在 Asp.Net Core 2.0 应用程序中使用 asp-for= 属性的人的问题。此外,如果您使用实体框架生成到数据库的迁移,删除[DataType(DataType.Date)]
模型中的属性将导致数据库表中的数据类型被创建(或更改)为文本类型,而实际上您可能需要日期类型你的数据库表。我建议不要理会该[DataType(DataType.Date)]
属性。
正如我上面所说,没有适用于所有浏览器的完美解决方案。所以,我所做的只是稍微妥协,不需要编辑表单的精确格式,同时仍然为所有其他日期显示保留我的特殊格式。
这是我的模型的 DateCompleted 部分:
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:MMM dd, yyyy}", ApplyFormatInEditMode = false)]
[Display(Name = "Date Completed")]
public DateTime DateCompleted { get; set; }
您可能会注意到,我更改的主要内容是[DisplayFormat(DataFormatString = "{0:MMM dd, yyyy}", ApplyFormatInEditMode = false)]
属性中的 bool 值。
我将其设置为false
而不是true
. 您也可以通过ApplyFormatInEditMode
完全消除该部分来获得相同的结果。
如:[DisplayFormat(DataFormatString = "{0:MMM dd, yyyy}")]
razor 语法中的视图代码如下所示:
<div class="form-group">
<label asp-for="DateCompleted" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="DateCompleted" class="form-control" />
<span asp-validation-for="DateCompleted" class="text-danger"></span>
</div>
</div>
给定日期 2016 年 1 月 26 日,非表单输入对象的格式显示为Jan 26, 2016。但是,编辑表单中的结果虽然不完全完美,但将 Firefox 和 Internet Explorer 中的日期呈现为2016-01-26。在 Chrome 和 Edge 中,结果显示2016年 1 月 26 日,并允许这些浏览器的内置日历弹出窗口完美运行。
好在所有这些浏览器都在非表单输入情况下显示所需的日期格式,并且仍然至少在表单字段中显示日期而不是显示dd/mm/yyyy
。
我希望这有帮助。