Asp.net mvc 5 不同浏览器之间的日期不一致-MVC 5来自模型的日期

Asp.net mvc 5 不同浏览器之间的日期不一致-MVC 5来自模型的日期,asp.net-mvc-5,Asp.net Mvc 5,我在视图模型中有以下内容: [Required] [Display(Name = "Date of birth")] [DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] public DateTime DateOfBirth { get; set; } 在表格上: <div class="form-group">

我在视图模型中有以下内容:

[Required]
[Display(Name = "Date of birth")]
[DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime DateOfBirth { get; set; }
在表格上:

<div class="form-group">
      @Html.LabelFor(model => model.DateOfBirth, htmlAttributes: new { @class = "control-label col-md-2" })
      <div class="col-md-10">
             @Html.EditorFor(model => model.DateOfBirth, new { htmlAttributes = new { @class = "form-control" } })
             @Html.ValidationMessageFor(model => model.DateOfBirth, "", new { @class = "text-danger" })
      </div>
</div>
Chrome开始以dd/MM/yyyy格式显示模型值(可能是因为我的本地区域设置?),但所有其他浏览器开始显示yyy-MM-dd格式

我知道这是一个国际公认的标准,但作为一个澳大利亚网站,我们使用的设计格式是dd/MM/yyyy

我是否可以让它工作,以便所有浏览器都显示dd/MM/yyyy,而无需求助于:

@Html.TextBoxFor(model => model.DateOfBirth, new { htmlAttributes = new { @class = "form-control" }, @Value = Model.DateOfBirth.ToString("dd/MM/yyyy") })
这意味着Chrome不提供日期选择器功能


使用最新版本的MVC,带有c#视图模型。看起来Opera的行为与Chrome类似。

Chrome似乎只接受格式为
yyyy-MM-dd
,因此下面的操作将起作用

[Required]
[Display(Name = "Date of birth")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime DateOfBirth { get; set; }
然后,它将显示指定的日期(使用您的区域设置),而不是日期字符串。我想这有一个优势,在另一种文化中的用户会看到他们文化中的日期,而不是你的

这实际上符合


如果您同时使用
@Html.DisplayFor(m=>m.DateOfBirth)
,这并没有多大帮助。一种解决方法是创建一个DisplayTemplate
DateTime.cshtml
,该模板使用
.ToString(“dd/MM/yyyyy”)

对日期字符串进行格式化。最后,我们只对日期、月份和年份字段使用了单独的下拉列表。我想另一个选择是找到一个适用于所有浏览器(和移动设备)的datepicker插件。讨厌

团队中的一些人并不完全相信为日期类型定义EditorTemplate,以防我们想在另一个屏幕上用它做一些有趣的事情。或者您是否在要在其中使用它的视图中控制它?抱歉,我不太明白-您是指EditorTemplate还是DisplayTemplate从您的问题来看,您似乎没有使用
DateTime
的编辑器模板,我可能对术语感到困惑。它需要是一个预填充日期的格式正确的可编辑字段。如果在
DisplayFormatAttribute
中,使用
DataFormatString=“{0:yyyy-MM-dd}”
然后在视图中使用
@Html.EditorFor(m=>m.DateOfBirth)
,那么这将呈现
OK,现在明白了。Chrome和Opera实际上已经按照标准实现了这一点(即日期输入字符串应该是“yyyy-MM-dd”,然后根据浏览器的区域设置显示。IE(通常)没有这样做,因此您可能运气不好。不确定除了使用日期选择器插件之外您还能做什么
[Required]
[Display(Name = "Date of birth")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime DateOfBirth { get; set; }