TextBoxДля вспомогательных смесей день и месяц в датах

Пожалуйста, рассмотрите следующий пример:

  1. просмотреть модель

    public class FooViewModel { public DateTime Date { get; set; } } 
  2. controller

     public class HomeController : Controller { [HttpGet] public ActionResult Index(FooViewModel foo) { return View(foo); } [HttpPost] public ActionResult Submit(FooViewModel foo) { return RedirectToAction("Index", foo); } } 
  3. Посмотреть

     @model MvcApplication1.Models.FooViewModel 

    @Model.Date

    @using (Html.BeginForm("Submit", "Home", FormMethod.Post)) { @Html.TextBoxFor(m => m.Date) }
  4. маршруты

     routes.MapRoute( null, "", new { controller = "Home", action = "Index" } ); routes.MapRoute( null, "{action}", new { controller = "Home" }, new { action = "Submit" } ); 

Проблема в том, что после отправки формы редактор даты получает значения с включенным днем ​​и месяцем:

  1. после первого отправки
  2. после повторной отправки

Что я могу сделать, чтобы он работал правильно?


На самом деле я попытался отформатировать значение редактора:

  1. @Html.TextBoxFor(m => m.Date, new { value = Model.Date.ToString("dd.MM.yyyy") })
  2. используя шаблоны редактора , как показано в шаблоне редактора MVC 2 с DateTime , только, конечно, для MVC3; и вместо этого я использовал помощника EditorFor чтобы использовать шаблон.
  3. используя DataAnnotations : [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MMM/dd/yyyy}")]

Ничто из этого ничего не изменило. Ни значение редактора не изменилось, либо оно не было отформатировано.


В конце концов мне (после ответа DrJokepu ) удалось сделать эту работу только с необработанным HTML, то есть без вспомогательных методов для DateTime :

 public static MvcHtmlString GetDateEditor(this FooViewModel model) { string temp = ""; return MvcHtmlString.Create( string.Format(temp, model == null ? string.Empty : model.Date.ToString("dd.MM.yyyy"))); } 

Если есть способ достичь одного и того же результата с помощью любого из вспомогательных методов, остается для меня секретом …

Пожалуйста, попробуйте слегка измененную версию:
@Html.TextBoxFor(m => m.Date, new { @Value = Model.Date.ToString("dd.MM.yyyy") })