Я все еще довольно новичок в ASP.NET MVC 3. Я сталкивался с моделями представления и их использованием для передачи данных из контроллера в представление. В моем недавнем вопросе о привязке модели два эксперта предложили мне также использовать модели представления для привязки модели.
Это то, с чем я раньше не сталкивался. Но оба парня уверяли меня, что это лучшая практика. Может быть, кто-то может пролить свет на причины, по которым модели представлений больше подходят для привязки моделей?
Вот пример ситуации: у меня есть простой класс в моей модели предметной области.
public class TestParent
{
public int TestParentID { get; set; }
public string Name { get; set; }
public string Comment { get; set; }
}
А это мой контроллер:
public class TestController : Controller
{
private EFDbTestParentRepository testParentRepository = new EFDbTestParentRepository();
private EFDbTestChildRepository testChildRepository = new EFDbTestChildRepository();
public ActionResult ListParents()
{
return View(testParentRepository.TestParents);
}
public ViewResult EditParent(int testParentID)
{
return View(testParentRepository.TestParents.First(tp => tp.TestParentID == testParentID));
}
[HttpPost]
public ActionResult EditParent(TestParent testParent)
{
if (ModelState.IsValid)
{
testParentRepository.SaveTestParent(testParent);
TempData["message"] = string.Format("Changes to test parents have been saved: {0} (ID = {1})",
testParent.Name,
testParent.TestParentID);
return RedirectToAction("ListParents");
}
// something wrong with the data values
return View(testParent);
}
}
Итак, в третьем методе действия, который вызывается при получении HTTP POST, я использовал TestParent для привязки модели. Это было довольно удобно, поскольку страница браузера, которая генерирует запрос HTTP POST, содержит поля ввода для всех свойств TestParent. И я действительно думал, что так работают шаблоны, которые Visual Studio предоставляет для операций CRUD.
Однако я получил рекомендацию о том, что подпись третьего метода действия должна выглядеть следующим образом: public ActionResult EditParent(TestParentViewModel viewModel)
.