在EditorFor()中显示一个格式化的date

我正在使用MVC4和entity framework来开发一个Intranet的Web应用程序。 我有一个我可以编辑的人员名单。 当我访问编辑视图时,在“开始date”文本框中,date显示如下: 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> 

任何想法如何做?

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

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

在你的模型中 ,你应该有:

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

在你的视图中 ,你只需要像你写的那样使用它:

 @Html.EditorFor(m => m.StartDate, new { htmlAttributes = new { @class = "datepicker" } }) 

它按预期工作。

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

该解决scheme也适用于MVC 5。

我是一个noob在这里(也与MVC),这只是马克西姆使用部分类的变化…

如果你有一个DB优先模型,并且不想直接改变它,因为害怕失去你的改变,只要在你自己的部分类中做同样的事情。 只需在您的模型文件夹中添加一个新的类/文件,并确保它使用与您生成的模型相同的名称空间。

因此,您将如何声明元数据来格式化date和修改另一个值的显示名称(即:缩写表中的列标题)

 namespace MyProjectName.Models { public class MyModelMeta { [DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}", ApplyFormatInEditMode = true)] // format used by Html.EditorFor public DateTime StartDate; [Display(Name = "User ID")] // abbreviation shown in Html.DisplayNameFor public string SomeReallyLongUserIDColumn; } [MetadataType(typeof(MyModelMeta))] public partial class MyModel { } }