Afficher une date formatée dans un EditorFor ()

J’utilise MVC4 et Entity Framework pour développer une application Web intranet. J’ai une liste de personnes que je peux éditer. Lorsque j’accède à la vue d’édition, dans la zone de texte “Date de début”, la date est affichée comme 7/11/2013 00:00:00 : 7/11/2013 00:00:00 . Ce que je veux faire, c’est l’afficher au format aaaa / MM / jj. J’ai essayé le Ssortingng.Format("{0:yyyy/MM/dd}", item.StartDate) mais cela ne fonctionne pas. J’ai également essayé avec l’annotation [DisplayFormat(DataFormatSsortingng = "{0:dd MMM yyyy}")] mais cela ne fonctionne pas non plus.

À mon avis, j’ai ceci:

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

Une idée sur comment faire?

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

Votre question demande EditorFor() mais le code que vous avez fourni utilise TextboxFor() .

Dans votre modèle , vous devriez avoir:

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

Dans votre vue , vous l’utilisez simplement comme vous l’avez écrit:

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

Cela fonctionne comme prévu.

En procédant ainsi (au lieu de modifier la façon dont il est affiché dans votre vue), vous pouvez réutiliser votre modèle ailleurs et vous n’avez pas besoin de spécifier comment afficher la date dans votre vue. Donc, si pour une raison quelconque, vous devez changer le format d’affichage, il vous suffira de le changer une seule fois.

La solution fonctionne également pour MVC 5.

Le top facile pour moi, ajoutait l’atsortingbut type ,

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

Html.EditorFor fonctionne également


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

Je suis un noob ici (et aussi avec MVC) et c’est juste une variation de Maxime utilisant une classe partielle …

Si vous avez un modèle DB-first et que vous ne voulez pas le modifier directement de peur de perdre vos modifications, faites simplement la même chose dans votre propre classe partielle. Ajoutez simplement une nouvelle classe / fichier dans votre dossier Models et assurez-vous qu’il utilise le même espace de noms que vos modèles générés.

Alors, voici comment vous déclareriez les métadonnées à la fois pour formater la date et modifier le nom d’affichage d’une autre valeur (par exemple: abréger les en-têtes de colonne dans une table)

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