【问题标题】:How does globalization culture affect MVC Dates全球化文化如何影响 MVC 日期
【发布时间】:2019-02-28 10:25:46
【问题描述】:

我有以下型号:

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”?

当我将&lt;globalization culture="en-AU" uiCulture="en-AU"/&gt; 更改为&lt;globalization culture="en-US" uiCulture="en-US"/&gt; 时,唯一的区别是HTML 生成value="09/25/2018" 而不是value="25/09/2018" 为什么网页的文本框中没有显示“mm/dd/yyyy”?

我正在使用 MVC5 和 Chrome,并且位于澳大利亚。

【问题讨论】:

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


    【解决方案1】:

    [DataType(DataType.Date)] 属性与EditorFor() 一起使用时会生成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}")
    

    【讨论】:

    • 我注意到 ApplyFormatInEditMode = true 将文本框更改为显示“26/09/2018”而不是“dd/mm/yyyy”。但是我原以为它会显示“2018-09-26”。如何让它以不同的格式显示日期?顺便说一句,HTML 显示了预期的日期格式: value="2018-09-26"
    • HTML5 日期选择器的目的是显示/编辑用户文化中的日期(因此除非您让用户更改其设备上的文化,否则您不能这样做)。如果你想在所有浏览器中使用一致的 UI,那么最好使用 jQuery datepicker 插件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多