我想把我的MVC项目分成几个项目

首先,我创建了两个项目FrontViews

项目Front是一个包含控制器和模型的Web应用程序

Views项目是一个仅包含视图的类库项目

我的问题是如何让控制器调用位于Views项目中的视图

我有这样的控制器:

public ActionResult Default()
        {
            return this.View();
        }

推荐答案

MVC不会将视图编译成DLL,而是从站点目录的根目录中引用它们作为文件.按照惯例,位置为~/Views,并遵循搜索路径.这或多或少是硬编码到默认视图引擎中的.

因为视图是文件,所以当您将它们分解到单独的项目中时,它们将不存在于主web应用程序项目中.因此,视图引擎无法找到它们.编译应用程序时,引用的任何项目都只会复制DLL(以及其他一些东西,比如pdb等)

现在,有一些方法可以解决这个问题,但说实话,它们通常比它们的价值更麻烦.您可以在mvc contrib项目中查看"可移植区域",但这些区域没有得到很好的支持,有人说要用NuGet打包来取代它们.

你也可以按照@mo.esmp的建议,创建一个定制的视图引擎,但你仍然需要找到方法将视图复制到网站在构建和/或部署时可以访问的地方.

我的建议是不要以你描述的方式开展项目.我看不出有什么价值.如果你的项目变得如此庞大,我会将你的代码分成几个区域,并将你所有的区域代码和数据放在一起.

将明显相互依赖的物品分离成单独的组件有什么价值?这些组件的唯一目的是根据它们的目的收集物品?我认为将模型分离到它们自己的项目中是有价值的,因为模型可以由多个部件使用.然而,控制器和视图仅由MVC主站点使用.

Asp.net相关问答推荐

Visual Studio发布的网站得到错误类型JObject is not defined when page is load on server"''"

ASP.NET控制器上的默认接受媒体类型

无法在Microsoft Windows Server 2016(数据中心)上运行.NET可移植性分析器

我可以强制刷新我的样式表文件吗?

Web 部署工具 2.1 和 Web 部署 3.5 有什么区别?从 VS 2010 部署需要哪一个?

jQuery隐藏字段

在哪里可以记录 ASP.NET Core 应用程序的启动/停止/错误事件?

IE10 SCRIPT5009:__doPostBack未定义

使用 IIS 的 ASP.NET 调试超时

ASP.net 页面在导入语句上出现错误,但我确实有参考?

防止 asp.net Web 表单中的跨站点请求伪造 (csrf) 攻击

Web.config 导致被组策略阻止错误

在 Blazor 中 Select 框绑定

如何以编程方式将标签的前景色设置为其默认值?

SimpleMembership 与 ASP.NET MVC 4 中的自定义数据库架构

如何防止aspxerrorpath作为查询字符串传递给 ASP.NET 自定义错误页面

如何使div按钮提交其所在的表单?

IIS 8.0 ASP.NET 和错误 500.19

ASP.net 判断页面是 http 还是 https

ASP.NET 邮箱验证器正则表达式