MVC 4 路由前缀和 Action url 生成问题

MVC 4 route prefix and Action url generation issue

我对视图中@Url.Action 生成的 URL 有疑问。我试图在 1 个 MVC 应用程序(modulair 应用程序,每个模块都有一个前缀和一个 Home 控制器)中使用多个具有相同名称的控制器。我正在使用带有命名空间的路由来完成路由并且工作正常。视图中 Url.Action 生成的 URL 存在前缀不正确的问题。这是我的路线定义:

//Default added for url building with section, but makes no difference
routes.MapRoute(
    name: "Default",
    url: "{section}/{controller}/{action}/{id}"
);

routes.MapRoute(
    name: "Test1",
    url: "Test1/{controller}/{action}/{id}",
    defaults: new { section = "Test1", controller = "Home", action = "Index", id = UrlParameter.Optional },
    namespaces: new[] { "MVCTest.Controllers.Test1" }
);

routes.MapRoute(
    name: "Test2",
    url: "Test2/{controller}/{action}/{id}",
    defaults: new { section = "Test2", controller = "Home", action = "Index", id = UrlParameter.Optional },
    namespaces: new[] { "MVCTest.Controllers.Test2" }
);

这有效,并且在浏览 /Test1 和 /Test2 时解析了正确的控制器。现在我有一个简单的视图(索引,用于两个操作):

Action url: @Url.Action("Action")

但结果总是'Action url: /Test1/Home/Action' 为什么?我尝试不使用默认路由,但结果相同(我为 url 的 {section} 部分添加了默认路由)。

如果我只使用默认路由并使用不同的控制器名称(或使用该部分确定命名空间的自定义控制器工厂),则操作 url 的生成是正确的。我可以做些什么来修复我的路线设置中的 Url 代吗?

这是您正在创建的区域吗?如果是这样的话,像下面这样的东西就可以了

@Url.Action("Action", "Controller", new { Area = "Test1" }, null)

下面的区域指南如果这个 link 坏了一个简单的 google 就足够了

http://www.itorian.com/2013/10/area-in-mvc-5-with-example-step-by-step.html