2010-01-04 28 views
45

Trong mô hình của tôi, tôi có DataAnnotations sau trên một trong những tài sản của tôiASP.Net MVC DisplayFormat

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

Chú thích theo yêu cầu hoạt động tuyệt vời, tôi đã thêm 2 khác để thử và loại bỏ thời gian. Nó bị ràng buộc vào đầu vào trong chế độ xem bằng cách sử dụng

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

Tuy nhiên, khi lượt xem tải tôi vẫn nhận được thời gian xuất hiện trong hộp nhập. Có cách nào để xóa mục này bằng cách sử dụng DataAnnotations không?

+0

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

+0

Hãy xem ... [http://stackoverflow.com/questions/1961114/date-only-from-textboxfor](http://stackoverflow .com/questions/1961114/date-only-from-textboxfor) và [http://stackoverflow.com/questions/726433/datetime-object-in-asp-net-mvc](http://stackoverflow.com/ câu hỏi/726433/datetime-object-in-asp-net-mvc) –

Trả lời

83

Thuộc tính [DisplayFormat] chỉ được sử dụng trong EditorFor/DisplayFor và không phải bởi API HTML thô như TextBoxFor.

+5

Tôi đang sử dụng cú pháp MVC4 Razor, trường ngày được hiển thị dưới dạng '@ Html.EditorFor (m => m.IssueDate)' và định dạng trên mô hình được áp dụng như '[DisplayFormat (DataFormatString =" {0: dd/MM/yyyy} ")]' nhưng ngày vẫn được hiển thị là '01/01/0001 12:00:00 AM' – bjan

+7

@bjan Bạn đã đặt Thuộc tính 'ApplyFormatInEditMode'? –

26

Như Brad nói rằng nó không hoạt động cho TextBoxFor nhưng bạn cũng cần phải nhớ thêm ApplyFormatInEditMode nếu bạn muốn nó làm việc cho EditorFor.

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

Sau đó sử dụng

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

EditorĐã xóa tôi. Tôi đã có TextBoxFor - Điều đó làm việc cho các định dạng khác như số hoặc nhãn. +1 – ppumkin

6

Vấn đề của tôi là để thiết lập một số thuộc tính html (jquery-datepicker), do đó EditorFor là không có lựa chọn cho tôi.

Thực hiện một tùy chỉnh helper-tole giải quyết vấn đề của tôi:

ModelClass với DateTime-tài sản:

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

View với ModelClass là Model:

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

Helper-Methode trong helper tĩnh lớp học:

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