我想把我的MVC项目分成几个项目
首先,我创建了两个项目Front和Views
项目Front是一个包含控制器和模型的Web应用程序
Views项目是一个仅包含视图的类库项目
我的问题是如何让控制器调用位于Views项目中的视图
我有这样的控制器:
public ActionResult Default()
{
return this.View();
}
我想把我的MVC项目分成几个项目
首先,我创建了两个项目Front和Views
项目Front是一个包含控制器和模型的Web应用程序
Views项目是一个仅包含视图的类库项目
我的问题是如何让控制器调用位于Views项目中的视图
我有这样的控制器:
public ActionResult Default()
{
return this.View();
}
MVC不会将视图编译成DLL,而是从站点目录的根目录中引用它们作为文件.按照惯例,位置为~/Views,并遵循搜索路径.这或多或少是硬编码到默认视图引擎中的.
因为视图是文件,所以当您将它们分解到单独的项目中时,它们将不存在于主web应用程序项目中.因此,视图引擎无法找到它们.编译应用程序时,引用的任何项目都只会复制DLL(以及其他一些东西,比如pdb等)
现在,有一些方法可以解决这个问题,但说实话,它们通常比它们的价值更麻烦.您可以在mvc contrib项目中查看"可移植区域",但这些区域没有得到很好的支持,有人说要用NuGet打包来取代它们.
你也可以按照@mo.esmp的建议,创建一个定制的视图引擎,但你仍然需要找到方法将视图复制到网站在构建和/或部署时可以访问的地方.
我的建议是不要以你描述的方式开展项目.我看不出有什么价值.如果你的项目变得如此庞大,我会将你的代码分成几个区域,并将你所有的区域代码和数据放在一起.
将明显相互依赖的物品分离成单独的组件有什么价值?这些组件的唯一目的是根据它们的目的收集物品?我认为将模型分离到它们自己的项目中是有价值的,因为模型可以由多个部件使用.然而,控制器和视图仅由MVC主站点使用.