你在看什么呢?
最近blog从Scott Hanselman关于使用特殊的模型粘合剂更容易测试导致我想到以下:
你在控制器逻辑中建立视图模型是什么,应该在视图中放置什么?他所做的是这样的:
var viewmodel = new DinnerFormviewmodel { Dinner = dinner,Countries = new SelectList(PhoneValidator.Countries,dinner.Country) }; return View(viewmodel);
现在,我用同样的方式将数据传递给我,但我不确定他如何处理国家财产.你可以争辩双方:
在SelectList中包装国家列表准备视图的数据,就像您创建一个视图模型DTO来传递数据一样.
另一方面,它以某种方式感觉像是专门操纵在下拉列表中使用的数据,限制了视图处理您的控制器数据的方式.
我觉得这是一个灰色的区域,分离了观点和控制者之间的关切,我不能真正地决定要走哪条路.有没有最佳做法?
PS:为了保持简单,让我们假设默认的ASP.NET MVC上下文,所以基本上你的开箱即用项目.默认视图引擎和所有爵士乐.
解决方法
在MVC中(至少是这种风格),控制器的一个职责就是为视图准备数据.所以我认为为视图消耗准备一个特定的模型是完全可以接受的,这意味着它将被用在一个下拉列表中.在这种情况下,控制器只是使视图更容易,实际上可以防止尴尬的代码不得不涓流地进入视图.它也使得一个在VDataData [“Countries”]中的ViewData中没有这些魔术字符串.
所以总结一下,尽管在责任方面似乎有一些灰色的区域,但最终这是控制器的工作:与视图进行交互,并将域模型转换为更容易消费的其他模型视图.