全球化文化如何影响MVC日期

时间:2018-09-24 20:58:15

标签: html asp.net asp.net-mvc asp.net-mvc-5

我有以下模型:

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" />

页面上的文本框如下所示:

enter image description here

我的第一个问题是,为什么显示“ 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,并且位于澳大利亚。

1 个答案:

答案 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}")