我正在使用ViewModel类在控制器和视图之间传递数据。当存在验证错误时,我将视图模型返回到视图,以便用户可以看到错误。
我很难找到处理只从控制器传递到视图的数据的最佳方法,这些数据不会传递回控制器,例如下拉列表的内容。
下面是我正在进行的项目中的一个简化示例:
我有一个
Widget
我的域模型中具有
Employee
财产。我有一个视图,允许用户通过从下拉列表中选择其名称来编辑此员工属性。
public class WidgetFormViewModel {
public SelectList EmployeeList { get; set; }
public int EmployeeID { get; set; }
public Widget Widget { get; set; }
}
控制器:
public ActionResult Edit(int id) {
var widget = _widgetService.GetWidgetByID(id);
var employees = _widgetService.GetAllEmployees();
var viewModel = new WidgetFormViewModel()
{
EmployeeList =
new SelectList(employees, "ID", "Name", widget.Employee),
Widget = widget,
WidgetID = widget.ID
};
return View("Edit", viewModel);
}
public ActionResult Edit(WidgetFormViewModel viewModel) {
var existingWidget = _widgetService.GetWidgetByWidgetID(viewModel.WidgetID);
existingWidget.Employee = _widgetService.GetEmployeeByID(viewModel.EmployeeID);
return ModelState.IsValid
? (ActionResult) RedirectToAction("List")
: View("Edit", viewModel)
}
现在,问题是:当
ModelState
无效和
viewModel
被传递回视图,
EmployeeList
属性为空。最好的方法是什么?
我应该在返回视图之前重新填充它吗?这种方法似乎难以维护。(如果我添加
PageTitle
和
HeaderText
到视图模型?突然之间有更多的事情需要跟踪。)还有其他方法吗?