MVC3 中模型 DisplayFormat 的 DataFormat 错误

Posted

技术标签:

【中文标题】MVC3 中模型 DisplayFormat 的 DataFormat 错误【英文标题】:Model DisplayFormat's DataFormat Error in MVC3 【发布时间】:2012-12-16 01:01:36 【问题描述】:

这是我根据当前文化设置日期格式的模型。

我尽量避免像 DataFormatString = "0:MM/dd/yyyy" 这样的硬编码 这样做的原因是为了得到当前的文化模式

 [Required(ErrorMessage = "Date is required")]
 [DisplayFormat(ApplyFormatInEditMode = true,
               DataFormatString = System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern.ToString())]
[Display(Name = "Date", ResourceType = typeof(Resources.Global))]
public DateTime Date  get; set; 

在.cshtml

@Html.TextBox("Date", 
    Model.Date.ToString("d", System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat), new  @class = "datePicker" )

问题:我收到一个错误

属性参数必须是常量表达式 typeof 属性参数类型的表达式或数组创建表达式

有没有办法在 MVC TextBox Helper 中显示基于当前文化的短日期?

【问题讨论】:

【参考方案1】:

0:d是当前文化ShortDatePattern

而不是

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern.ToString())]

你应该使用

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = 0:d)]

设置后,DataFormatString 仅用于 EditorFor 和 DisplayFor。因此,您应该将视图更改为

@Html.EditorFor(model => model.Date, new  @class = "datepicker" )

记得在视图顶部添加@model YourModel

【讨论】:

@Html.EditorFor(model => model.Date, new @class = "datepicker" ) 不起作用 - 第二个参数是附加视图数据,而不是 html 属性!检查EditorFor documentation

以上是关于MVC3 中模型 DisplayFormat 的 DataFormat 错误的主要内容,如果未能解决你的问题,请参考以下文章

自定义格式日期的 MVC3 不显眼日期验证

ASP.NET MVC3:使用 JQuery DatePicker 和 editorFor/TextBoxFor 以正确的格式显示日期

MVC3显示日期+短时间无格式字符串

为什么DisplayFormat DataFormatString不起作用?

MVC3 模型到数据库视图

具有多个模型的 MVC3 视图