【发布时间】:2010-01-29 05:53:24
【问题描述】:
我正在使用 ASP.NET MVC2 RC,但不知道如何让 HTML 帮助器 TextBoxfor 与 ViewModel 模式一起工作。在编辑页面上使用时,在控制器中调用 UpdateModel() 时不会保存数据。我从 NerdDinner 应用程序中获取了以下代码示例。
编辑.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>
晚餐控制器
// 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(dinner) 调用会按预期工作并保存新值。
当使用新的 (MVC2) 辅助样式 (Http.TextBoxFor) 时,UpdateModel(dinner) 调用不会更新值。是的,当前值会在加载时加载到编辑页面中。
我还需要在控制器代码中添加其他内容以使其工作吗?如果我只使用模型而不是 ViewModel 模式,新的帮助程序可以正常工作。
谢谢。
【问题讨论】:
-
嗨,我在创建操作时遇到了同样的问题。你能看看stackoverflow.com/questions/2494940/…