Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc EF4模型、MVC模型和视图模型。。。模仿还是不模仿?_Asp.net Mvc_Entity Framework_Model - Fatal编程技术网

Asp.net mvc EF4模型、MVC模型和视图模型。。。模仿还是不模仿?

Asp.net mvc EF4模型、MVC模型和视图模型。。。模仿还是不模仿?,asp.net-mvc,entity-framework,model,Asp.net Mvc,Entity Framework,Model,我目前正在使用EF4和asp.net mvc 3,当您将这些技术结合在一起时,我在处理不同类型的模型时肯定会遇到一些问题 我有一个我定义的数据库,通过EF4我有一个数据库模型。但是也有传递到我的视图的模型,那么视图模型呢 假设我有一个项目的mvc模型。此项目具有描述、名称和类别属性。我有一个视图页面,它创建一个项目并将其返回给控制器,以便通过ef4插入数据库。因此,我最初创建了一个具有这些确切属性的类作为我的模型。然而,在创建项目时,我的页面还需要一个类别列表供选择,因此我向模型中添加了一个字符

我目前正在使用EF4和asp.net mvc 3,当您将这些技术结合在一起时,我在处理不同类型的模型时肯定会遇到一些问题

我有一个我定义的数据库,通过EF4我有一个数据库模型。但是也有传递到我的视图的模型,那么视图模型呢

假设我有一个项目的mvc模型。此项目具有描述、名称和类别属性。我有一个视图页面,它创建一个项目并将其返回给控制器,以便通过ef4插入数据库。因此,我最初创建了一个具有这些确切属性的类作为我的模型。然而,在创建项目时,我的页面还需要一个类别列表供选择,因此我向模型中添加了一个字符串数组,该数组与其他属性一起作为项目模型的一部分传递到页面中,效果很好。一切都很好。。。但我想。。。因为如果项目模型为一个项目建模,那么它不应该有一个完整的类别列表。它应该只有属于该项目的类别

但是,这一完整的分类列表去了哪里。在风景包里?这对我来说似乎不正确?我应该创建视图模型吗?这个视图模型看起来如何?在项目模型中添加一个类似GetCategories()的方法怎么样?然后我可以从视图页面调用这个方法。。。但这是否打破了mvc中理想的关注点分离

我相信很多人对这个问题会有不同的看法,但任何能帮助我度过这场混乱的评论都会有所帮助


谢谢,

在所有最简单的应用程序中,最好不要将模型对象传递给视图。视图应该有一个ViewModel,它由控制器使用来自模型对象的数据构造,并且包含视图显示其信息所需的所有内容


ViewModels将表示层与业务层分离,您的示例演示了这一点的重要性;您的视图需要有关
项目
的信息,还需要一个
项目
可能属于的所有
类别
的完整列表-这样的列表在逻辑上不适合
项目
域模型对象,但在逻辑上完全适合
项目视图模型

谢谢Steve,这当然很有道理。。。是否将“类别”列表作为视图模型的一个功能,并从视图中运行该功能?或者将在控制器中执行该操作?我将在
ProjectViewModel
上具有
SelectList Categories{get;set;}
属性,并在控制器中填充该属性。控制器将通过其构造函数将对象(或对象,取决于系统的大小)注入其中,并从中获取可用类别集。