Chrome在默认日历中显示dd / mm / yyyy - 而不是模型中的实际日期

时间:2014-06-25 14:26:46

标签: asp.net asp.net-mvc asp.net-mvc-3 google-chrome

在我的模型上使用[DataType(DataType.Date)]时 - 如果它填充了一个值,并且我让“现代”浏览器使用其内置日历显示它,它将永远不会填充日期。< / p>

public class StockPurchase
{
    public int StockPurchaseId { get; set; }
    [Required]
    [Display(Name = "Date of purchase")]
    [DataType(DataType.Date)]
    public DateTime Date { get; set; }
    [Required]
    public decimal Amount { get; set; }

}

这是一个已知问题(我正在使用Chrome)。

谢谢,Mark

Calendar

1 个答案:

答案 0 :(得分:4)

这本身并不是一个“已知问题”,只是HTML5日期控制如何工作的问题。日期输入预计采用ISO 8601格式,日期为YYYY-MM-DD。您dd/mm/yyyy的格式已本地化,以便用户更容易输入日期,但一旦选定,浏览器就会设置ISO 8601中的值。

问题是ASP.NET MVC没有在ISO 8601中设置值,而是在系统本地化版本中设置,然后浏览器无法理解。解决方案是强制MVC通过将以下属性添加到日期属性来设置正确的值:

[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]

然后将使用正确的ISO 8601格式化日期将该字段的值设置为渲染,浏览器将理解它。

注意:这是在视图中直接使用视图模型而不是实体的另一个原因。更有可能的是,您实际上并不希望您的购买日期始终显示为YYYY-MM-DD。如果为此使用特定于创建/编辑的视图模型,则可以在该属性上设置上述属性,然后在实际实体的属性上设置更合适的版本,或者在特定于显示已输入信息的视图模型上设置用户。