【发布时间】:2014-12-22 17:08:09
【问题描述】:
正如我在10 Good practices for asp.net mvc webapplications 上发现的,在 ViewModel(代表视图的模型)和 InputModels(代表用户输入的数据)中拆分 mvc 模型是一种很好的做法。
ViewModel 获得一个 InputModel 类型的属性。 InputModel承载了用户可以编辑的数据。
public class EmployeeInputModel{
public string Name {get;set;}
public Id? DepartmentId{get;set;}
}
public class EmployeeCreateViewModel{
public IList<Department> Departments{get;set;}
public EmployeeInputModel EmployeeModel{ get;set;}
}
控制器方法如下所示:
public class EmployeeController : Controller{
public ActionResult Create(){
var viewModel = new EmployeeCreateViewModel(DepartmentService.GetAll(), new EmployeeInputModel());
return View(viewModel);
}
public ActionResult Create(EmployeeInputModel createModel){
try{
EmployeeService.Create(...);
return RedirectToAction("Index");
} catch (Exception ex){
var viewModel = new EmployeeCreateViewModel(DepartmentService.GetAll(), createModel);
return View(viewModel)
}
}
}
视图看起来像:
@model EmployeeCreateViewModel
@Html.EditorFor(m => m.EmployeeModel)
编辑器部分就像:
@model EmployeeInputModel
@Html.TextBoxFor(m => m.Name)
@Html.DropDownFor(m => m.Department, ???)
这对我很有用,除非我谈到 DropDownLists(在示例中请参阅部门)。因为 EditorTemplate 不知道 ViewModel,而只知道 InputModel。
我不想将部门列表放入输入模型中,因为它不是该列表的假定位置(我必须绑定它们)。它必须在视图模型中。输入模型的属性也不应该在 ViewModel 中。
有人知道如何在一个视图中实现视图模型和输入模型的分离吗?
【问题讨论】:
-
尽管我同意本文的大部分内容,但我看不出从视图模型中分离“输入模型”的巨大好处。视图模型被认为是用户正在编辑的数据的“视图”,因此不需要单独的输入模型,在您的情况下,它也会使事情变得过于复杂
标签: c# asp.net asp.net-mvc razor viewmodel