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

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

  • просмотреть модель

    public class FooViewModel
    {
        public DateTime Date { get; set; }
    }
    
  • контроллер

    public class HomeController : Controller
    {
        [HttpGet]
        public ActionResult Index(FooViewModel foo)
        {
            return View(foo);
        }
        [HttpPost]
        public ActionResult Submit(FooViewModel foo)
        {
            return RedirectToAction("Index", foo);
        }
    }
    
  • Вид

    @model MvcApplication1.Models.FooViewModel
    <h1>@Model.Date</h1>
    @using (Html.BeginForm("Submit", "Home", FormMethod.Post))
    {
        @Html.TextBoxFor(m => m.Date)
        <input type="submit" value"Submit" />
    }
    
  • маршруты

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

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

  • after first submit
  • after resubmit

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


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

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

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


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

public static MvcHtmlString GetDateEditor(this FooViewModel model)
{
    string temp = "<input id=\"Date\" type=\"text\" value=\"{0}\" name=\"Date\" 
                    data-val-required=\"Please, enter a valid date\" 
                    data-val=\"true\" />";
    return MvcHtmlString.Create(
                 string.Format(temp, 
                               model == null 
                                    ? string.Empty 
                                    : model.Date.ToString("dd.MM.yyyy")));
    }

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

Ответ 1

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