Attribuer le format de DateTime avec des annotations de données?


99

J'ai cet attribut dans mon modèle de vue:

[DataType(DataType.DateTime)]
public DateTime? StartDate { get; set; }

Si je veux afficher la date ou remplir une zone de texte avec la date, j'ai ceux-ci:

<%: Model.StartDate %>

<%: Html.TextBoxFor(m => m.StartDate) %>

Chaque fois que la date est affichée, elle est affichée comme: 01/01/2011 12:00:00 AM

Mais je souhaite n'afficher que le 01/01/2011

Existe-t-il un moyen d'appliquer un format d'affichage avec des annotations de données? Je ne veux pas avoir à accéder à chaque instance où j'affiche une date et à ajouter du code pour la formater.


Réponses:


151

Essayez de le taguer avec:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]

Juste essayé, il affiche toujours l'heure dans la zone de texte et quand elle est juste affichée sur la page.
Steven

3
@Steven: Pouvez-vous essayer de supprimer [DataType(DataType.DateTime)]si vous ne l'avez pas déjà fait?
David Fox

8
DisplayFormatfonctionne uniquement avec EditorForet DisplayForhelpers.
Ε Г И І И О

1
Excellente réponse - il me manquait le parm "ApplyFormatInEditMode".
CodeHxr

5
J'ai pu résoudre cela par paramètre de format dans Html.TextBoxFor. En le réglant sur, @Html.TextBoxFor(model => model.YOUR_DATE, "{0:MM/dd/yyyy}")j'ai pu obtenir uniquement la date à afficher. Trouvé ceci ici [ stackoverflow.com/a/14529347/2938775] .
Caffeinius

44

Avez-vous essayé cela?

[DataType(DataType.Date)]

2
Cela activera également la prise en charge du sélecteur de date HTML5, si le navigateur le prend en charge.
AaronLS

24

Dans mvc 4, vous pouvez facilement le faire comme suit en utilisant TextBoxFor..

@Html.TextBoxFor(m => m.StartDate, "{0:MM/dd/yyyy}", new { @class = "form-control default-date-picker" })

Ainsi, vous n'avez pas besoin d'utiliser d'annotation de données dans le modèle ou la classe de modèle de vue


oui, ces DataAnnotations fonctionnent très bien pour les helpers EditorFor, mais, lors du rendu d'une grille personnalisée avec un IEnumerable (Of Entity), vous devez utiliser le .TextBoxFor et c'était mon problème. Merci
bkwdesign

22

Si votre champ de données est déjà un type de données DateTime, vous n'avez pas besoin de l'utiliser [DataType(DataType.Date)]pour l'annotation; utilisez simplement:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]

sur jQuery, utilisez datepicker pour votre calendrier

    $(document).ready(function () {
        $('#StartDate').datepicker();
    });

sur votre HTML, utilisez EditorForhelper:

    @Html.EditorFor(model => model.StartDate)

"Si votre champ de données est déjà un type de données DateTime, vous n'avez pas besoin d'utiliser [DataType(DataType.Date)]" => cela a été utile
Hassan Tareq

Mais pour l'API Web, le format d'affichage ne s'applique pas DataFormatString = "{0:MM/dd/yyyy}"(n'a pas reçu de corps de demande 400, même avait un autre format, c'est-à-dire {"dob":"31/12/1990"})
Hassan Tareq

18

Appliquer DataAnnotation comme:

[DisplayFormat(DataFormatString = "{0:MMM dd, yyyy}")]

10

Utilisez ceci, mais c'est une solution complète:

[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]



1

Ça marche pour moi

[DataType(DataType.DateTime)]
[DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]

0

définissez votre propriété en utilisant le code ci-dessous au moment de la création du modèle, je pense que votre problème sera résolu et que l'heure n'apparaît pas dans la base de données. Vous n'avez pas besoin d'ajouter d'annotation.

private DateTime? dob;
        public DateTime? DOB
        {
            get
            {
                if (dob != null)
                {
                    return dob.Value.Date;
                }
                else
                {
                    return null;
                }

            }
            set { dob = value; }
        }
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.