請考慮下面的例子:TextBoxFor幫手混入日期的日期和月份
視圖模型
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") })
- 使用編輯模板,如圖MVC 2 Editor Template with DateTime,僅當然採用MVC3;而且我還使用
EditorFor
輔助器來使模板得到利用。 - 使用
DataAnnotations
:[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MMM/dd/yyyy}")]
這些改變任何東西都沒有。編輯器的值沒有改變,也沒有顯示格式。
最後我(跟隨the answer by 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")));
}
如果有一種方法可以實現同樣的結果任何輔助方法仍然是一個祕密,我...
如果格式化日期,該怎麼辦? – 2013-04-11 06:26:01
@HanletEscaño我確實需要在編輯器中格式化日期,這確實也應該解決問題。然而,我沒有格式化它...我會在一段時間內描述我在這個問題的嘗試 – horgh 2013-04-11 06:31:39
我猜數據庫中的日期格式是不同的,這就是爲什麼它導致的問題,你可以將日期格式應用到您的ViewModel (如果你使用它們來綁定視圖?) – dakait 2013-04-11 06:38:29