我想将我的MVC项目分成几个项目
@H_301_2@所以首先我创建了两个Project和Views项目
@H_301_2@Front项目是一个包含控制器和模型的Web应用程序
@H_301_2@Views项目是一个仅包含视图的类库项目
@H_301_2@我的问题是如何使控制器调用位于Views项目中的视图
@H_301_2@我有这样的控制器:
public ActionResult Default() { return this.View(); }
解决方法
MVC不会将视图编译到DLL中,而是将它们作为您的站点目录根目录中的文件引用.按照惯例的位置是〜/ Views,并且跟踪搜索路径.这或多或少被硬编码到默认视图引擎中.
@H_301_2@由于视图是文件,当您将它们分解为单独的项目时,它们将不存在于您的主要Web应用程序项目中.因此,视图引擎找不到它们.当您编译应用程序时,引用的任何项目只会复制DLL(并且可能还有其他一些事情,如pdb等)
@H_301_2@现在,有办法解决这个问题,但老实说,他们通常比他们的价值更麻烦.您可以在mvc contrib项目中查看“便携式区域”,但是这些项目没有得到很好的支持,并且已经有人用NuGet打包来代替它们了.
@H_301_2@您还可以遵循@ mo.esmp的建议,并创建一个自定义视图引擎,但是您仍然需要找出在构建和/或部署时可以访问该站点的位置复制视图的方法.
@H_301_2@我的建议是不要以你所描述的方式打破项目.我没有看到任何价值.如果您的项目变得如此之大,我会将您的代码分成几个区域,并将所有区域代码和数据保存在一起.
@H_301_2@将明确依赖于彼此的项目分离成单独的组件有什么价值,唯一目的是根据目的收集东西?我认为将模型分离成自己的项目有一些价值,因为模型可以由多个组件使用.然而,控制器和视图只能由MVC主站点使用.