我想把我的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相关问答推荐

包含Include的低速EF核心查询

单个方法(即扩展方法)之间的调用不明确

如何在没有 Select 按钮的情况下在 GridView 中实现全行 Select ?

你能从请求变量中确定时区吗?

ASP.NET Web 应用程序 (.NET Framework) 与 ASP.NET Core Web 应用程序 (.NET Framework) 之间的差异

asp.net dropdownlist - 在 db 值之前添加空行

在构建时自动停止/重新启动 ASP.NET 开发服务器

如何使用 json 将复杂类型传递给 ASP.NET MVC 控制器

对布尔查询字符串参数使用true或1

在 Blazor 中 Select 框绑定

从 IIS 7/8 中的静态内容中删除服务器标头

如何在 ASP.NET 应用程序中使用 jQuery 捕获提交事件?

最佳服务器端 .NET PDF 编辑库

Page.IsValid 是如何工作的?

oAuth ASP.NET 成员资格提供程序

在 ASP.NET 中实现 404 的最佳方法

.NET 4.0 中的自定义 MembershipProvider

如何清除 System.Runtime.Caching.MemoryCache

配置授权服务器端点

以编程方式滚动到锚标记