刚开始做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>
任何人都可以解释为什么编辑模式中的日期不同?还有如何修复Chrome?我知道有人建议了其他方法(比如添加模型,文件等),但我只是想看看是否有一个简单的解决方案,而无需添加额外的文件/模型。感谢。
答案 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-dd
和Index
视图中以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无关,后者在浏览器文化中呈现日期。