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

时间:2017-11-03 17:32:07

标签: c# asp.net asp.net-mvc asp.net-mvc-4 routing

我有一个项目,我正在从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文件夹本身。然而,在我移动之前,这一切都没有奏效,所以我怀疑是这样的。我也认为Autofac与此有关,但我不太确定,因为如果我刮了"测试"它按照预期匹配的URL部分。

我想这一切都归结为如何检查"泛型"控制器目录首先,在匹配特定于区域的控制器目录之前,即使在URL中指定了区域。

提前感谢您的帮助!

编辑:如果有帮助,我注意到在现有的MVC 2解决方案中,如果我转到Test/Home,它会调用Index方法HomeController。但是,在新解决方案中不会发生这种情况。这是因为没有与新路线相关的View吗?我还没有为每个相应的.ascx文件创建新的.cshtml文件,但是我并不认为这应该是重要的,因为否则会使用它们。

1 个答案:

答案 0 :(得分:0)

显然这个问题与命名空间有关。我在这样的问题上看到了答案,但那些与碰撞发现观点有关。以下是我最后添加到我的每个区域注册的行:

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
    );