【发布时间】:2016-03-13 03:37:05
【问题描述】:
我对视图中 @Url.Action 生成的 URL 有疑问。我试图在 1 个 MVC 应用程序中拥有多个具有相同名称的控制器(模块化应用程序,每个模块都有一个前缀和一个 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 生成?
【问题讨论】:
标签: asp.net-mvc-4 url action