为带有子文件夹的ASP.NET MVC区域路由生成URL

问题描述 投票:2回答:2

我有一个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>

它总是在区域和控制器之间的URL中注入dashboardwidgets关键字,如下所示:{host} / accesscontrol / dashboardwidgets / Home / Index

如何根据我的需要生成URL,或者到区域的根目录,还是到该区域下的这个子文件夹?

c# asp.net asp.net-mvc asp.net-mvc-routing asp.net-mvc-areas
2个回答
3
投票

我认为解决方案是在构建链接时使用命名路由。您需要从

切换呼叫
@Url.Action("Index","Home",new{area="AccessControl"})

@Url.RouteUrl("AccessControl_dashboardwidgets", new {area = "AccessControl", controller="Home", action="Index"})

@Url.RouteUrl("AccessControl_default", new {area = "AccessControl", controller="Home", action="Index"})

取决于您要瞄准的路线。

对参数的混淆,很抱歉,正在做其他事情时正在编辑……显然应该避免在星期一早上执行多任务:)


0
投票

为了使用@ Url.Action扩展方法,您需要像这样为routeValues参数指定httproute名称:

@Url.Action("Index","Home", new { httproute ="AccessControlApi_default"} )
© www.soinside.com 2019 - 2024. All rights reserved.