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.

Steven
la source

Réponses:

151

Essayez de le taguer avec:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
David Fox
la source
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)]
rk1962
la source
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

Hasib Hasan Arnab
la source
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)
Toddt
la source
"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}")]
Chirag
la source
10

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

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

Utilisez EditorFor plutôt que TextBoxFor

collusionbdbh
la source
1

Ça marche pour moi

[DataType(DataType.DateTime)]
[DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
FelixAVeras
la source
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; }
        }

la source