web-dev-qa-db-fra.com

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 de modification, dans la zone de texte "Date de début", la date est affichée comme suit: 7/11/2013 00:00:00. Ce que je veux faire, c'est l'afficher au format aaaa/mm/jj. J'ai essayé le String.Format("{0:yyyy/MM/dd}", item.StartDate) mais cela ne fonctionne pas. J'ai aussi essayé avec l'annotation [DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")] mais cela ne fonctionne pas non plus.

À mon avis, j'ai ceci:

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

Une idée sur comment faire?

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

enter image description here

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

Dans votre modèle (par exemple, MyModel.cs), vous devez avoir:

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

Dans votre vue (par exemple, Index.cshtml), vous l'utilisez simplement comme vous l'avez écrit:

@Html.EditorFor(m => m.StartDate, new { htmlAttributes = 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 ne pas avoir à spécifier comment afficher la date dans votre vue. Ainsi, si pour une raison quelconque, vous devez modifier le format d'affichage, il vous suffira de le modifier une fois.

La solution fonctionne également pour MVC 5.

72
Maxime

Le top facile pour moi, ajoutait l'attribut type,

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

Html.EditorFor fonctionne également


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

essaye ça

<div class="editor-field">
    @Html.TextBoxFor(model => model.StartDate, new { htmlAttributes = new { @Value = Model.StartDate.ToString("yyyy/MM/dd"), type = "date"  }})
    @Html.ValidationMessageFor(model => model.StartDate)
</div>
0
nAyeem

Je suis un noob ici (et aussi avec MVC) et ce n'est qu'une variante 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, procédez de la même manière dans votre classe partielle. Ajoutez simplement une nouvelle classe/fichier dans votre dossier Modèles et assurez-vous qu’il utilise le même espace-noms que vos modèles générés.

Alors, voici comment vous déclareriez les métadonnées pour formater la date et modifier le nom complet d’une autre valeur (par exemple, pour abréger les en-têtes de colonne d’un tableau).

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
    {

    }
}
0
xyvyx