我有一个ASP.NET MVC应用程序,其区域包含以下特殊路径:
区域注册文件:
context.Routes.MapHttpRoute(
"AccessControlApi_default",
"accesscontrol/api/{controller}/{id}",
new { id = RouteParameter.Optional }
);
context.MapRoute(
"AccessControl_dashboardwidgets",
"accesscontrol/dashboardwidgets/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional },
new[] { "AccessControl.Controllers.DashboardWidgets" }
);
context.MapRoute(
"AccessControl_default",
"accesscontrol/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional },
new[] { "AccessControl.Controllers" }
);
第一个路由用于api,第二个用于控制器和区域下子文件夹中的视图,第三个用于区域下的默认控制器。
一切都适用于路由,但问题在于使用像这样的Url.Action
:
<a href='@Url.Action("Index","Home",new{area="AccessControl"})'>Go to home</a>
始终在区域和控制器之间的网址中注入 dashboardwidgets 关键字,如下所示: {host} / accesscontrol / dashboardwidgets / Home / Index
如何根据我的需要生成网址,可以是区域的根,还是区域下的子文件夹?
答案 0 :(得分:3)
我认为解决方案是在构建链接时使用命名路由。您需要从
切换呼叫@Url.RouteUrl("AccessControl_dashboardwidgets", new {area = "AccessControl", controller="Home", action="Index"})
到
@Url.RouteUrl("AccessControl_default", new {area = "AccessControl", controller="Home", action="Index"})
或
{{1}}
取决于您的目标路线。
对于参数的混淆感到抱歉,在做其他事情时进行了编辑......周一早上的多任务显然是要避免的:)
答案 1 :(得分:0)
要使用@ Url.Action扩展方法,您需要像这样为routeValues参数指定httproute名称:
@Url.Action("Index","Home", new { httproute ="AccessControlApi_default"} )