代码之家  ›  专栏  ›  技术社区  ›  David Klempfner

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

  •  1
  • David Klempfner  · 技术社区  · 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 });
    }
    

      <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

    当我改变的时候 <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”?

    1 回复  |  直到 5 年前
        1
  •  1
  •   user3559349 user3559349    5 年前

    这个 [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}")