模型DisplayFormat的MVC3中的DataFormat错误

时间:2013-01-01 08:01:10

标签: c# asp.net-mvc asp.net-mvc-3 razor

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

我试图避免硬编码,例如 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 :(得分:-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