Chrome中MVC5中的编辑日期未显示正确的格式

时间:2018-06-15 06:54:52

标签: asp.net-mvc google-chrome asp.net-mvc-5 cross-browser

刚开始做MVC。按照此页面中的示例:Adding Validation教程中的Getting Started with ASP.NET MVC 5

在模型中,日期和格式为:

using System;
using System.ComponentModel.DataAnnotations;

namespace MvcMovie.Models
{
    public class Movie
    {
        public int ID { get; set; }
        public string Title { get; set; }

        [Display(Name = "Release Date")]
        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
        public DateTime ReleaseDate { get; set; }
        public string Genre { get; set; }
        public decimal Price { get; set; }
    }
}

日期格式符合此SO Answer。所以(使用Chorme,Edge和IE)当我在i)索引页面,ii)详情页面,甚至在iii)删除页面时,我看到日期显示为yyyy-MM-dd(例如1959-04-15 1959年4月15日)。

但是当我进入编辑页面时,不同浏览器的日期会有所不同。

Chrome:04/15/1959
边缘:1959年4月15日
IE:1959-04-15

(当我在所有3个浏览器中查看源时,都显示1959-04-15。)

我认为以下建议(根据the tutorial's description导致了问题,但即使我删除了以下文化规范,所有浏览器的结果都是相同的。

<system.web>
    <globalization culture ="en-US" />
    <!--elements removed for clarity-->
</system.web>
  1. 我电脑的区域设置是英语(香港特别行政区)&#39;。短日期格式为d / M / yyyy。
  2. 此外,当我在本地数据库中查看数据时,显示的日期为15/4/1959 0:00:00&#39;。看起来它使用了计算机的区域设置。
  3. 任何人都可以解释为什么编辑模式中的日期不同?还有如何修复Chrome?我知道有人建议了其他方法(比如添加模型,文件等),但我只是想看看是否有一个简单的解决方案,而无需添加额外的文件/模型。感谢。

1 个答案:

答案 0 :(得分:1)

[DataType(DataType.Date)]在使用type="date"时会生成@Html.EditorFor()属性,后者会生成浏览器HTML-5 datepicker。 IE中不支持type="date",这就是为什么你只得到一个文本框,只显示指定格式的日期。

要比较各种浏览器的HTML-5支持,请参阅HTML 5 TEST。另请注意,FireFox刚刚开始支持type="date"

至于yyyy-MM-ddIndex视图中以Details格式显示的日期,这是因为您正在使用使用@Html.DisplayFor()的{​​{1}} DataFormatString的属性来格式化值。

[DisplayFormat]Index观看次序中的选项只是使用

Details

另一种方法是将属性更改为

@Model.YourDate.ToString("d") // or what ever format string you want

以便DisplayFormat(DataFormatString = "{0:d}")] 生成正确的格式,然后在@Html.DisplayFor()视图中,使用

Edit

生成浏览器HTML-5 datepicker。

但是如果你想在所有浏览器中使用一致的datepicker,那么你需要使用jQuery插件(例如jQuery UI)。

另请注意,服务器上的文化与浏览器HTML-5 datepicker无关,后者在浏览器文化中呈现日期。