你在你的视图中放了什么?
Scott Hanselman最近的一篇关于使用特殊模型绑定器来简化测试的博客让我想到了以下问题:在构建视图模型的控制器逻辑中放置了什么,应该在视图中放置什么?他所做的是:
var viewModel = new DinnerFormViewModel {
Dinner = dinner,
Countries = new SelectList(PhoneValidator.Countries, dinner.Country)
};
return View(viewModel);
现在,我使用相同的方式将数据传递给我的视图,但我不确定他如何处理 Country 属性。您可能会争论双方:将国家列表包装在 SelectList 中会为视图准备数据,就像您创建视图模型 DTO 来传递数据一样。另一方面,感觉就像您在专门操作要在下拉列表中使用的数据,从而限制了视图处理来自控制器的数据的方式。我觉得这在视图和控制器之间的关注点分离上有点灰色地带,我真的无法决定走哪条路。有没有这方面的最佳实践?
PS:为简单起见,让我们假设默认的 ASP.NET MVC 上下文,所以基本上是您的开箱即用项目。默认视图引擎和所有爵士乐。