MVC 4 - 路由到非区域控制器的问题

MVC 4 - issue with routing to non-area controllers

我有一个项目正在从 MVC 2 -> MVC 4 升级。在从 MVC 2 -> MVC 3 的转换过程中,我注意到我的一些超链接断开了并且不再匹配之前定义的路由.我有以下项目结构:

...
App_Data
Areas
  Test
    Controllers
        TestController
    Views
    Models
Controllers
    PartialController
Views
Scripts
...

生成的链接格式为/Test/Partial/Render。如果我返回 运行 迁移前的项目,PartialController Render 操作会按预期命中。但是,现在该应用程序说找不到操作,因为没有 Test/Partial 控制器。我实际上不确定它之前是如何工作的,但似乎无法正确映射它。

有什么我想念的吗?这是相关代码:

Global.asax.cs:

...

        AreaRegistration.RegisterAllAreas();
        RegisterRoutes(RouteTable.Routes);
...

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = "" }
        );

TestAreaRegistration.cs:

context.MapRoute(
            "Test_default",
            "Test/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }
        );

我确实将 Controllers 文件夹上移了一个级别,以便更符合项目的结构;之前它位于 Areas 文件夹中。但是,none 在我移动它之前就起作用了,所以我怀疑情况是否如此。我还认为 Autofac 与此有关,但我不太确定,因为如果我将 "Test" 部分从 URL 中剔除,它会按预期匹配。

我想这一切都归结为一个问题,即如何在匹配到特定区域的控制器目录之前首先检查 "generic" 控制器目录,即使在 URL.

在此先感谢您的帮助!

编辑: 如果有帮助,我注意到在现有的 MVC 2 解决方案中,例如,如果我转到 Test/Home,它将调用 Index HomeController 的方法。但是,这不会在新解决方案中发生。这是因为没有与新路线关联的视图吗?我还没有为每个相应的 .ascx 文件制作新的 .cshtml 文件,但我认为这不重要,因为它们在其他地方被使用。

很明显这个问题与命名空间有关。我曾在此类问题上看到过该答案,但这些问题与寻找观点的碰撞有关。这是我最终添加到我的每个区域注册中的行:

context.MapRoute(
        "Test_default",
        "Test/{controller}/{action}/{id}",
        new { action = "Index", id = UrlParameter.Optional },
        new string[] { "Project.Web.Controllers", "Project.Web.Areas.Test.Controllers" }  //added this line
    );