簡體   English   中英

使用子文件夾為 ASP.NET MVC 區域路由生成 URL

[英]Generating URLs for ASP.NET MVC Area routing with subfolder

我有一個 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,第二個是area下子文件夾中的controllers和views,第三個是area下的默認controllers。

一切都在路由方面運行良好,但問題在於像這樣使用Url.Action

<a href='@Url.Action("Index","Home",new{area="AccessControl"})'>Go to home</a>

它總是在區域和控制器之間的 url 中注入dashboardwidgets關鍵字,如下所示: {host}/accesscontrol/ dashboardwidgets /Home/Index

如何根據我的需要生成url,要么是區域的根目錄,要么是區域下的這個子文件夾??

我認為解決方案是在構建鏈接時使用命名路由。 您需要將呼叫從

@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"})

取決於您的目標路線。

很抱歉參數混亂,正在做其他事情的同時進行編輯...顯然要避免周一早上的多任務處理:)

為了使用@Url.Action 擴展方法,您需要為 routeValues 參數指定 httproute 名稱,如下所示:

@Url.Action("Index","Home", new { httproute ="AccessControlApi_default"} )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM