3

Я пытаюсь выяснить, как отформатировать дату с помощью MVC3 RC2 и модели, украшенной DataAnnotations.Проблема с атрибутами и форматированием MVC ModelMetaData a Дата

Это моя модель ...

public class Model 
{ 
    [Display(Name = "Date of Birth")] 
    [DisplayFormat(@DataFormatString = "MM/dd/yyyy")] 
    public DateTime DateOfBirth { get; set; } 
} 

Это мой контроллер ...

public class IndexController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(new Model() {DateOfBirth = DateTime.Now}); 
    } 
} 

Это мое мнение ...

@model MvcApplication6.Models.Model 

@Html.LabelFor(m=>m.DateOfBirth) 
@Html.TextBoxFor(m => m.DateOfBirth) 
@Html.EditorFor(m => m.DateOfBirth) 

Когда я бегу сайта, для обоих элементов управления на странице отображается текстовое поле со временем, включенным в строку, когда все, что я хочу, это дата (как указано в украшенном свойстве в модели).

Я использовал Brad Wilson's article для ModelMetaData для этого шаблона.

Означает ли я, что я делаю неправильно?

ответ

7

ли это:

[DisplayName("Date of Birth")] 
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] 
public DateTime DateOfBirth { get; set; } 
0

На самом деле я считаю, что здесь проблема связана с тем, что DefaultModelBinder не занимается DateTimes надлежащим образом (это означает, что мы не можем связать фронтальным поле к DateTime частичное, как мы привыкли делать в других [кашляCastleMonorailкашель] рамки MVC).

Я создал заказное связующее устройство, чтобы справиться с этой проблемой. Но Скотт Гензельман сделал что-то подобное here, поэтому, я думаю, вы можете просто использовать его решение.

Конечно, вы можете иметь дело с этой ситуацией через атрибуты, но это означает, что вам нужно указать это специальное форматирование в все поля DateTime. И это не решит еще одну проблему: иногда нам нужно иметь одно поле для части даты, а другое для временной части только в интерфейсе и сохранить одно поле datetime в бэкэнд. Такое решение для связующего устройства позволяет именно это.

Смежные вопросы