tôi đang làm việc với ASP.NET MVC2 RC và không thể tìm ra cách để có được sự trợ giúp HTML, TextBoxfor để làm việc với một ViewModel mẫu. Khi được sử dụng trên trang chỉnh sửa, dữ liệu sẽ không được lưu khi UpdateModel() được gọi trong bộ điều khiển. Tôi đã lấy các ví dụ mã sau đây từ ứng dụng NerdDinner.Sử dụng ViewModel mẫu với MVC 2 Typed mạnh HTML Helpers
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));
}
}
Khi phong cách helper gốc được sử dụng (Http.TextBox) các UpdateModel (ăn tối) gọi việc như mong đợi và các giá trị mới sẽ được lưu.
Khi sử dụng kiểu trợ giúp mới (MVC2) (Http.TextBoxFor), lệnh gọi UpdateModel (bữa tối) không cập nhật các giá trị. Có, các giá trị hiện tại được tải vào trang chỉnh sửa khi tải.
Có điều gì khác mà tôi cần phải thêm vào mã bộ điều khiển để nó hoạt động không? Trình trợ giúp mới hoạt động tốt nếu tôi chỉ sử dụng một mô hình chứ không phải một mẫu ViewModel.
Cảm ơn bạn.
Xin chào, tôi có cùng một vấn đề về tạo hành động. Bạn có thể vui lòng xem http://stackoverflow.com/questions/2494940/custom-viewmodel-with-mvc-2-strongly-typed-html-helpers-return-null-object-on-cre –