这是我的模型,用于根据当前区域性格式化日期。

我试图避免像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中显示基于当前区域性的短日期?

最佳答案

{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

10-02 01:25