在EditorFor()中显示格式化日期

Tra*_*ffy 57 c# asp.net-mvc date

我正在使用MVC4和Entity Framework来开发Intranet Web应用程序.我有一个可以编辑的人员列表.当我访问编辑视图时,在文本框"开始日期"中,日期显示如下:7/11/2013 00:00:00.我想要做的是以yyyy/MM/dd格式显示它.我试过了,String.Format("{0:yyyy/MM/dd}", item.StartDate)但它不起作用.我也试过了注释,[DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")]但它也不起作用.

在我看来,我有这个:

<div class="editor-field">
        @Html.TextBoxFor(model => model.StartDate, new { @class = "datepicker" })
        @Html.ValidationMessageFor(model => model.StartDate)
    </div>
Run Code Online (Sandbox Code Playgroud)

有什么想法怎么办?

Vla*_*mir 104

@Html.TextBoxFor(m => m.StartDate, 
    new { @Value = Model.StartDate.ToString("yyyy/MM/dd"), @class="datepicker" })
Run Code Online (Sandbox Code Playgroud)

  • 十分感谢!不要像我一样用小写字母v写@value:-s否则你会撕掉你的头发. (6认同)
  • 在我的情况下,这工作:`@Value = Model.StartDate.ToShortDateString()` (3认同)
  • 这对我不起作用,但Maxime的回答是:) (2认同)

Max*_*ime 73

您的问题要求,EditorFor()但您提供的代码使用TextboxFor().

在您的模型中,您应该:

public class MyModel
{
    [DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}", ApplyFormatInEditMode = true)]
    public DateTime StartDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在您的视图中,您只需像编写它一样使用它:

@Html.EditorFor(m => m.StartDate, new { htmlAttributes = new { @class = "datepicker" } })
Run Code Online (Sandbox Code Playgroud)

它按预期工作.

通过这样做(而不是改变它在视图中显示的方式),您可以在其他地方重用您的模型,而不必指定如何在视图中显示日期.因此,如果由于某种原因,您必须更改显示格式,您只需要更改一次.

该解决方案也适用于MVC 5.

  • 这是一个很好的答案.比接受的答案更好.虽然请注意,为了在Chrome中使用它,日期格式字符串必须是`yyyy-MM-dd` (3认同)
  • 啊,诀窍是在自定义属性周围添加htmlAttributes.很高兴知道.谢谢. (3认同)