2010-01-04 19 views
45

Nel mio modello ho le seguenti DataAnnotations su una delle mie proprietàASP.Net MVC DisplayFormat

[Required(ErrorMessage = "*")] 
[DisplayFormat(DataFormatString = "{0:d}")] 
[DataType(DataType.Date)] 
public DateTime Birthdate { get; set; } 

L'annotazione richiesto grandi opere, ho aggiunto gli altri 2 per cercare di rimuovere il tempo. Viene associato a un input nella vista utilizzando

<%=Html.TextBoxFor(m => m.Birthdate, new { @class = "middle-input" })%> 

Tuttavia, ogni volta che la vista viene caricata, ho ancora l'ora visualizzata nella casella di input. Esiste comunque la possibilità di rimuoverlo utilizzando DataAnnotations?

+0

Vedi http://stackoverflow.com/q/1961114/2291 –

+0

Dai un'occhiata a ... [http://stackoverflow.com/questions/1961114/date-only-from-textboxfor](http://stackoverflow .com/questions/1961114/date-only-from-textboxfor) e [http://stackoverflow.com/questions/726433/datetime-object-in-asp-net-mvc](http://stackoverflow.com/ domande/726433/datetime-object-in-asp-net-mvc) –

risposta

83

L'attributo [DisplayFormat] viene utilizzato solo in EditorFor/DisplayFor e non dalle API HTML non formattate come TextBoxFor.

+5

Sto usando la sintassi Razor MVC4, il campo data è reso come '@ Html.EditorFor (m => m.IssueDate)' e la formattazione sul modello viene applicato come '[DisplayFormat (DataFormatString =" {0: dd/MM/yyyy} ")]' ma la data è ancora mostrata come '01/01/0001 12:00:00' – bjan

+7

@bjan Hai impostato il Proprietà 'ApplyFormatInEditMode'? –

26

Come Brad ha detto che non funziona per TextBoxFor ma dovrai anche ricordarti di aggiungere ApplyFormatInEditMode se vuoi che funzioni per EditorFor.

[DataType(DataType.Date), DisplayFormat(DataFormatString="{0:dd/MM/yy}", ApplyFormatInEditMode=true)] 
public System.DateTime DateCreated { get; set; } 

Quindi utilizzare

@Html.EditorFor(model => model.DateCreated) 
+0

EditorPer buttarmi fuori. Ho avuto TextBoxFor - Che ha funzionato per altre formattazioni come numeri o etichette. +1 – ppumkin

6

Il mio problema è stato quello di impostare alcuni attributi HTML (jquery-DatePicker), quindi EditorFor c'era un'opzione per me.

Implementazione di un aiutante-Methode personalizzato risolto il problema:

ModelClass con DateTime-Proprietà:

[DataType(DataType.Date)] 
[DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}", ApplyFormatInEditMode = true)] 
public DateTime CustomDate{ get; set; } 

View con ModelClass come modello:

@Html.TextBoxWithFormatFor(m => m.CustomDate, new Dictionary<string, object> { { "class", "datepicker" } }) 

Helper-Methode in helper statica classe:

public static class HtmlHelperExtension { 
    public static MvcHtmlString TextBoxWithFormatFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IDictionary<string, object> htmlAttributes) { 
     ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); 
     return htmlHelper.TextBox(htmlHelper.ViewData.TemplateInfo.GetFullHtmlFieldName(metadata.PropertyName), string.Format(metadata.DisplayFormatString, metadata.Model), htmlAttributes); 
    } 
}