2010-01-04 12 views
45

W moim modelu mam następujące DataAnnotations na jednym z moich właściwościASP.Net MVC DisplayFormat

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

Wymagany adnotacja działa świetnie, dodałem pozostałe 2, aby spróbować usunąć czas. Jest on przywiązany do wejścia w widoku przy użyciu Jednak za każdym razem, gdy widok ładuje się, wciąż pojawia się czas w polu wprowadzania. Czy istnieje mimo to usunąć to za pomocą DataAnnotations?

+0

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

+0

Spójrz na ... [http://stackoverflow.com/questions/1961114/date-only-from-textboxfor](http://stackoverflow .com/questions/1961114/date-only-from-textboxfor) i [http://stackoverflow.com/questions/726433/datetime-object-in-asp-net-mvc](http://stackoverflow.com/ pytania/726433/datetime-object-in-asp-net-mvc) –

Odpowiedz

83

Atrybut [DisplayFormat] jest używany tylko w EditorFor/DisplayFor, a nie w surowych API HTML takich jak TextBoxFor.

+5

Używam składni Razor MVC4, pole daty jest renderowane jako '@ Html.EditorFor (m => m.IssueDate)' i formatowanie w modelu jest stosowane jako '[DisplayFormat (DataFormatString =" {0: dd/MM/rrrr} ")], ale data jest nadal pokazywana jako" 01/01/0001 12:00:00 AM' – bjan

+7

@bjan Czy ustawiłeś Właściwość 'ApplyFormatInEditMode'? –

26

Jak Brad powiedział, że to nie działa dla TextBoxFor, ale musisz również pamiętać o dodaniu ApplyFormatInEditMode, jeśli chcesz, aby działał dla EditorFor.

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

Następnie użyj

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

EdytorOdrzucił mnie. Miałem TextBoxFor - To działało dla innych formatów, takich jak liczby lub etykiety. +1 – ppumkin

6

Moim problemem było ustawić kilka atrybutów HTML (jQuery-DatePicker), więc nie było EditorFor opcja dla mnie.

Wdrażanie niestandardowych pomocnika-methode rozwiązać mój problem:

ModelClass z DateTime-Nieruchomości:

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

widok z ModelClass jako model:

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

Helper-Methode w pomocnika statycznej klasa:

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); 
    } 
}