2

生成的URL我有一個具有特殊地區航線如下的ASP.NET MVC應用程序:用於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關鍵字在這樣的面積和控制器之間的網址:{主機}/accesscontrol/dashboardwidgets /首頁/索引

如何根據我的需要生成url,無論是根區還是此子文件夾在該地區?

回答

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

我給它一個嘗試 –

+0

它產生全錨,不僅是網址? –

+0

根據MSDN,他們都生成完全限定的URL,請參閱此鏈接:https://msdn.microsoft.com/en-us/library/system.web.mvc.urlhelper_methods(v=vs.118).aspx – JTMon