我有以下模型:
public class Appointment
{
[DataType(DataType.Date)]
public DateTime Date { get; set; }
}
视图:
@model ModelValidation.Models.Appointment
Appointment Date: @Html.EditorFor(m => m.Date)
和控制器:
public ViewResult MakeBooking()
{
return View(new Appointment { Date = DateTime.Now });
}
我已将其添加到Web.config:
<system.web>
...
<globalization culture="en-AU" uiCulture="en-AU"/>
</system.web>
这将产生以下HTML正文:
Appointment Date: <input class="text-box single-line"
data-val="true" data-val-date="The field Date must be a date."
data-val-required="The Date field is required."
id="Date" name="Date" type="date" value="25/09/2018" />
页面上的文本框如下所示:
我的第一个问题是,为什么显示“ dd / mm / yyyy”而不是“ 25/09/2018”?
当我将<globalization culture="en-AU" uiCulture="en-AU"/>
更改为<globalization culture="en-US" uiCulture="en-US"/>
时,唯一的区别是HTML生成了value="09/25/2018"
而不是value="25/09/2018"
为什么然后在网页的文本框中不显示“ mm / dd / yyyy”?
我正在使用MVC5和Chrome,并且位于澳大利亚。
答案 0 :(得分:1)
[DataType(DataType.Date)]
属性与type="date"
一起使用时会生成EditorFor()
,而后者又会生成浏览器的HTML5日期选择器。
HTML规范要求日期必须为ISO格式,因此您需要添加一个[DisplayFormat]
属性
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime Date { get; set; }
,然后将在用户区域中显示日期(这是HTML5日期选择器的目的)。
或者,您可以使用
@Html.TextBoxFor(m => m.Date, "{0:yyyy-MM-dd}")