我与ASP.NET MVC2 RC工作,无法弄清楚如何获得HTML帮助,TextBoxfor与视图模型模式工作。在编辑页面上使用时,在控制器中调用UpdateModel()时不会保存数据。我从NerdDinner应用程序中获得了以下代码示例。使用视图模型模式与MVC 2强类型HTML辅助
Edit.aspx
<%@ Language="C#" Inherits="System.Web.Mvc.ViewUserControl<NerdDinner.Models.DinnerFormViewModel>" %>
...
<p>
// This works when saving in controller (MVC 1)
<label for="Title">Dinner Title:</label>
<%= Html.TextBox("Title", Model.Dinner.Title) %>
<%= Html.ValidationMessage("Title", "*") %>
</p>
<p>
// This does not work when saving in the controller (MVC 2)
<label for="Title">Dinner Title:</label>
<%= Html.TextBoxFor(model => model.Dinner.Title) %>
<%= Html.ValidationMessageFor(model=> model.Dinner.Title) %>
</p>
DinnerController
// POST: /Dinners/Edit/5
[HttpPost, Authorize]
public ActionResult Edit(int id, FormCollection collection) {
Dinner dinner = dinnerRepository.GetDinner(id);
if (!dinner.IsHostedBy(User.Identity.Name))
return View("InvalidOwner");
try {
UpdateModel(dinner);
dinnerRepository.Save();
return RedirectToAction("Details", new { id=dinner.DinnerID });
}
catch {
ModelState.AddModelErrors(dinner.GetRuleViolations());
return View(new DinnerFormViewModel(dinner));
}
}
当使用原始助手风格(Http.TextBox)中的UpdateModel(晚餐)调用按预期工作和新的值保存。
当使用新的(MVC2)辅助方式(Http.TextBoxFor)时,UpdateModel(dinner)调用不会更新这些值。是的,当前值在加载时加载到编辑页面。
是否还有其他东西需要添加到控制器代码中才能使用?如果我只是使用模型而不是ViewModel模式,那么新的帮助器可以正常工作。
谢谢。
嗨,我有关于创建操作的相同问题。你可以请看一下 http://stackoverflow.com/questions/2494940/custom-viewmodel-with-mvc-2-strongly-typed-html-helpers-return-null-object-on-cre – 2010-03-23 12:02:43