MVC .Net嵌套项目

时间:2014-08-20 21:06:38

标签: visual-studio asp.net-mvc-4

我们正在重新设计网站,我们希望过渡到MVC。它是一个非常大的网站,我们目前的情况是我们有一个根项目,然后我们为每个部门都嵌套了子项目。这样每个部门都可以单独重新编译。在IIS中使用虚拟目录,我们也可以在根项目中拥有一个主页面,所有其他项目都使用(我们所有页面当前都是ASPX)。此虚拟目录解决方案的缺点是,在调试子项目时,子主页面不可用于子项目。我们希望切换到MVC,希望MVC可以解决这个问题。

对于新网站,我创建了一个MVC项目,它将作为根项目。我已经准备好了共享布局,但我遇到了一些大问题:

  1. 我无法找到一种可行的方法来创建嵌套的MVC 每个部门的项目。我尝试了很多不同的东西 方式,但我总是最终得到403错误。我能够创造 根项目中的区域和这有效,但事实并非如此 允许我们重新编译个别区域,这是必须的,作为我们的网站 太简单了。
  2. 如何在所有的根目录中共享布局 部门项目(即使在调试期间),而不依赖于IIS虚拟目录。一世 尝试使用Razor Generator,但似乎有点太复杂了 对我来说,我永远无法得到任何工作,甚至弄清楚它是否能够做我需要的。
  3. 非常感谢任何建议。如果没有办法将部分分成可以单独编译的其他项目,那么对于大型网站来说,MVC似乎毫无用处。

2 个答案:

答案 0 :(得分:1)

说明如何做到这一点。这是我刚刚聚集在一起的测试项目的快照。您获得的403很可能是因为IIS配置为不列出文件夹的内容,并且这些虚拟目录中没有任何内容。

这里重要的是控制器和模型在一个单独的项目中。您的观点在您的主要项目中。尝试将视图打包到外部项目中要困难得多。它可以做到,但是现在的想法是你会创建nuget包来将你的区域部署到生产中(这意味着你最终会将你的所有视图放在生产中)。

这对你来说是一个很好的第一步。如果您发现这还不够,那么您可以查看其他方法。但请先尝试让这项工作为您服务。

您需要做的另一件事是更改您的AreaRegistration(它也会保留在您的主站点中,尽管您可以通过依赖注入找出一种方法使这些方法在单独的项目中工作)

public override void RegisterArea(AreaRegistrationContext context) 
    {
        context.MapRoute(
            "Test_default",
            "Test/{controller}/{action}/{id}",
            // add controller = "yourcontroller" for default controller for area
            new { controller = "Some", action = "Index", id = UrlParameter.Optional },
            new [] { "YourExternalProjectNamespace.Controllers" } <-- This gets added
        );
    }

enter image description here

答案 1 :(得分:0)

在我们的灵魂中,我们有一个单独的表示层(MVC网站)项目,它依赖于在其他项目中为各个区域(学科)和核心类(例如,核心存储库,安全类,域模型)编译的DLL。 。

这些区域旨在使用基类,然后引用其他库中定义的核心或特定类。我们大量使用接口和泛型来构建表示层中的大部分基本功能,然后在必要时扩展它。