Ответ 1
Пожалуйста, попробуйте слегка измененную версию: @Html.TextBoxFor(m => m.Date, new { @Value = Model.Date.ToString("dd.MM.yyyy") })
Пожалуйста, рассмотрите следующий пример:
просмотреть модель
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" }
);
Проблема заключается в том, что после отправки формы редактор даты получает значения с включенным днем и месяцем:
Что я могу сделать, чтобы он работал правильно?
На самом деле я попытался отформатировать значение редактора:
@Html.TextBoxFor(m => m.Date, new { value = Model.Date.ToString("dd.MM.yyyy") })
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")));
}
Если есть способ достичь одного и того же результата с любым из вспомогательных методов, остается для меня секретом...
Пожалуйста, попробуйте слегка измененную версию: @Html.TextBoxFor(m => m.Date, new { @Value = Model.Date.ToString("dd.MM.yyyy") })