asp.net-mvc – 在您的ViewModel中放置什么

你在看什么呢?

最近blogScott 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中没有这些魔术字符串.

所以总结一下,尽管在责任方面似乎有一些灰色的区域,但最终这是控制器的工作:与视图进行交互,并将域模型转换为更容易消费的其他模型视图.

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....