Assegnare il formato di DateTime con le annotazioni dei dati?


99

Ho questo attributo nel mio modello di visualizzazione:

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

Se voglio visualizzare la data o popolare una casella di testo con la data, ho questi:

<%: Model.StartDate %>

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

Ogni volta che viene visualizzata la data, viene visualizzata come: 01/01/2011 12:00:00 AM

Ma vorrei visualizzare solo il 01/01/2011

C'è un modo per applicare un formato di visualizzazione con annotazioni di dati? Non voglio dover andare in ogni istanza in cui visualizzo una data e aggiungere del codice per formattarla.


Risposte:


151

Prova a taggarlo con:

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

Appena provato, visualizza ancora l'ora nel TextBox e quando è appena visualizzato sulla pagina.
Steven

3
@Steven: puoi provare a rimuovere [DataType(DataType.DateTime)]se non l'hai già fatto?
David Fox

8
DisplayFormatfunziona solo con EditorFore DisplayForhelper.
Ε Г И І И О

1
Ottima risposta: mi mancava il parametro "ApplyFormatInEditMode".
CodeHxr

5
Sono stato in grado di risolvere questo problema tramite il parametro di formato in Html.TextBoxFor. Impostandolo su @Html.TextBoxFor(model => model.YOUR_DATE, "{0:MM/dd/yyyy}")sono stato in grado di visualizzare solo la data. Ho trovato questo qui [ stackoverflow.com/a/14529347/2938775] .
Caffeinius

44

Hai provato questo?

[DataType(DataType.Date)]

2
Ciò abiliterà anche il supporto del selettore di data HTML5, se il browser lo supporta.
AaronLS

24

In mvc 4 puoi facilmente farlo come se stessi usando TextBoxFor..

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

Quindi, non è necessario utilizzare alcuna annotazione dei dati nel modello o nella classe del modello di visualizzazione


sì, quelle DataAnnotation funzionano alla grande per gli helper di EditorFor, ma, quando si esegue il rendering di una griglia personalizzata con un IEnumerable (Of Entity) devi usare .TextBoxFor e questo era il mio problema. Grazie
bkwdesign

22

Se il campo dati è già un tipo di dati DateTime, non è necessario utilizzarlo [DataType(DataType.Date)]per l'annotazione; basta usare:

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

su jQuery, usa il datepicker per il tuo calendario

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

sul tuo HTML, usa l' EditorForhelper:

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

"Se il campo dati è già un tipo di dati DateTime, non è necessario utilizzarlo [DataType(DataType.Date)]" => è stato utile
Hassan Tareq

Ma per l'API web, il formato di visualizzazione non è vincolante DataFormatString = "{0:MM/dd/yyyy}"(non ho ricevuto 400 nemmeno il corpo della richiesta aveva un altro formato, ad es. {"dob":"31/12/1990"})
Hassan Tareq

18

Applica DataAnnotation come:

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

10

Usa questo, ma è una soluzione completa:

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



1

Per me va bene

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

0

imposta la tua proprietà usando il codice sottostante al momento della creazione del modello, penso che il tuo problema sarà risolto..e l'ora non viene visualizzata nel database.Non è necessario aggiungere alcuna annotazione.

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

            }
            set { dob = value; }
        }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.