2011-07-06 15 views
7

ho il mio campo Modello decorato nel modo seguente:ASP.NET MVC data la visualizzazione senza tempo

[DataType(DataType.Date)] 
[Display(Name = "Date of birth")] 
public string DateOfBirth { get; set; } 

Quando voglio visualizzare il valore nella vista utilizzando il seguente codice:

<%: Html.DisplayFor(m => m.DateOfBirth) %> 

Il problema è che la data viene visualizzata insieme al suo valore temporale. Mi chiedo il motivo per cui non prende in considerazione l'attributo DateType e visualizza solo il valore della data senza tempo. So che potrei creare un modello di visualizzazione per DateTime ma in altri casi oltre la data di nascita, voglio mostrare il tempo insieme alla data. Come risolvere il problema?

risposta

4

Usa DisplayFormatAttribute per indicare formato quando viene visualizzato il valore. Inoltre, è possibile creare due DisplayTemplates, Date e DateTime e utilizzare UIHintAttribute per specificare il modello

9

Questo dovrebbe farlo per la modalità di modifica e visualizzazione

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

anche se si tratta solo di visualizzare, questo potrebbe funzionare

[DisplayFormat(DataFormatString = "{0:d}")] 
+0

ha funzionato per il mio. Grazie! – Marta

+0

Non necessario affatto. –

+0

@MystereMan Sto pensando che tu sappia cosa stai facendo. (questo). Potrebbe non essere necessario ma sicuramente sai che devi essere più specifico dei tuoi commenti qui. cosa aggiungono alla conoscenza generale? voterò per te una risposta migliore. – dove

6

Il problema riscontrato è che si sta utilizzando un valore stringa anziché un DateTime.

cambiamento il vostro modello di essere:

[DataType(DataType.Date)] 
[Display(Name = "Date of birth")] 
public DateTime? DateOfBirth { get; set; } 

tipo di dati funziona solo se si tratta di un tipo DateTime, si ottiene anche il vantaggio che sarà automaticamente convalidarla come una data valida quando si utilizza un DateTime. Se si utilizza la stringa, sarà necessario utilizzare un validatore di espressioni regolari per garantire che sia stata immessa una data corretta.

+0

Recentemente ho avuto una risonanza in cui chrome inserisce elementi divertenti quando il tipo di input è data, parte di html5 penso, volevo usare jquery datepicker invece così sono andato con DataType.Text - che mi permetteva comunque di usare la formattazione abbastanza interessante – John

+0

@ John - "cose ​​divertenti"? Fa parte dello standard html. Se utilizzi html5, dovresti utilizzare i tipi di input html5. È probabile che tu non abbia appena capito qualcosa, e invece di fare la cosa giusta, hai interrotto la gestione della data di MVC. –

+0

no intendo che Chrome aggiunge datepicker che non sembrano belle come le versioni di jquery che preferisco – John

4

È possibile utilizzare ToShortDateString() o ToLongDateString() per visualizzare solo la data, ad esempio:

@Model.EventDate.ToShortDateString() 
@Model.EventDate.ToLongDateString() 
Problemi correlati