Я работаю с ASP.NET MVC2 RC и не могу понять, как получить HTML-помощник, TextBoxfor для работы с шаблоном ViewModel. При использовании на странице редактирования данные не сохраняются при вызове функции UpdateModel() в контроллере. Я привел следующие примеры кода из приложения NerdDinner.
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 (ужин) не обновляет значения. Да, текущие значения загружаются на страницу редактирования при загрузке.
Есть ли что-то еще, что мне нужно добавить в код контроллера для его работы? Новый помощник отлично работает, если я просто использую модель, а не шаблон ViewModel.
Спасибо.