Mostrar una fecha formateada en un EditorFor ()

Estoy usando MVC4 y Entity Framework para desarrollar una aplicación web de intranet. Tengo una lista de personas que puedo editar. Cuando accedo a la vista de edición, en el cuadro de texto “Fecha de inicio”, la fecha se muestra así: 7/11/2013 00:00:00 . Lo que quiero hacer es mostrarlo en el formato aaaa / MM / dd. String.Format("{0:yyyy/MM/dd}", item.StartDate) el String.Format("{0:yyyy/MM/dd}", item.StartDate) pero no funciona. También probé con la anotación [DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")] pero tampoco funciona.

En mi opinión tengo esto:

 
@Html.TextBoxFor(model => model.StartDate, new { @class = "datepicker" }) @Html.ValidationMessageFor(model => model.StartDate)

¿Alguna idea de cómo hacerlo?

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

Su pregunta pregunta por EditorFor() pero el código que proporcionó usa TextboxFor() .

En tu modelo , deberías tener:

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

En tu Vista , simplemente lo usas como lo escribiste:

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

Funciona como se esperaba.

Al hacerlo de esa manera (en lugar de modificar la forma en que se muestra en su Vista), podría reutilizar su modelo en otro lugar y no tiene que especificar cómo mostrar la fecha en su Vista. Por lo tanto, si, por algún motivo, tiene que cambiar el formato de visualización, solo tendrá que cambiarlo una vez.

La solución también funciona para MVC 5.

Lo más fácil para mí fue agregar el atributo de tipo ,

 @Html.EditorFor(model => model.FechaRegistro, new { htmlAttributes = new { @class = "form-control oso" ,@type = "date" } }) 

Html.EditorFor también funciona


 @Html.EditorFor(model => model.StartDate, new { htmlAttributes = new { @class = "datepicker", @Value = model.StartDate.ToString("yyyy/MM/dd") } }) 

Soy un novato aquí (y también con MVC) y esto es solo una variación de Maxime usando una clase parcial …

Si tiene un primer modelo de base de datos y no desea modificarlo directamente por temor a perder sus cambios, simplemente haga lo mismo en su propia clase parcial. Simplemente agregue una nueva clase / archivo dentro de su carpeta de Modelos y asegúrese de que use el mismo espacio de nombres que sus modelos generados.

Así es como declararía los metadatos tanto para formatear la fecha como para modificar el nombre para mostrar de otro valor (es decir, para abreviar los encabezados de columna en una tabla)

 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 { } }