2013-07-17 13 views
0

我想我仍然不明白路線。Html.ActionLink會根據路線生成錯誤的鏈接。地圖路線

我有三個控制器

  • AdminController
  • DashboardController
  • ProjectGroupsController

對於儀表板,我想要的網址是/Dashboard/。不過,對於管理員部分,我需要兩個不同的控制器。 /Admin/Overview應該使用AdminController,而/Admin/ProjectGroups/應該使用ProjectGroupsController

這是我的路由怎麼看起來像

routes.MapRoute(
      name: "AdminOverivew", 
      url: "Admin/Overview", 
      defaults: new { controller = "Admin", action = "Overview" }, 
      namespaces: new[] { "Com.Controllers" } 
     ); 

    routes.MapRoute(
     name: "AdminSubs", 
     url: "Admin/{controller}/{action}/{id}", 
     defaults: new { action = "Index", id = UrlParameter.Optional }, 
     namespaces: new[] { "Com.Controllers" } 
    ); 

    routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional }, 
     namespaces: new[] {"Com.Controllers"} 
    ); 

*注意,對於第二個路線的原因是因爲我在管理部分更多的控制器。

它正在工作..但HTML.ActionLink生成的URL是錯誤的。 @Html.ActionLink("Dashboard", "Index", "Dashboard"........)當它應該是/Dashboard時生成/Admin/Dashboard

然而,@Html.ActionLink("Project Groups", "Index", "ProjecGroups".....)生成正確的URL /Admin/ProjectGroups

如果我拿出第二個routes.MapRoute(AdminSubs),則情況正好相反。儀表板獲取正確的URL,/Dashboard然後項目組變成/ProjectGroups當它應該保持/Admin/ProjectGroups

什麼給?

回答

1

我想你需要一些更明確的路由,因爲路由器不知道「catch all」Admin/{controller}/{action}/{id}{controller}/{action}/{id}之間的區別。第一個匹配的模式是它使用的模式。

您也需要管理員前綴下襬脫Admin/{controller}/{action}/{id}和任何需要被明確指定爲路徑,或者相反,取出{controller}/{action}/{id}路線,並明確制定路線,應該是分開的根目錄中。

+0

謝謝@steve。所以你說,對於「ProjectGroups」,我應該將/Admin/ProjectGroups/...controller="ProjecGroups「指定爲正確的?就像我對「/ Admin/Overview」所做的一樣? HTMl.ActionLink()呢?它仍然生成錯誤的網址。 [編輯 - 沒關係。現在我指定了明確的路由/控制器]。 – Liming

+0

@Liming完全正確。您應該添加額外的管理路線。如果它仍然生成錯誤的URL,請確保它在所有的「{controller}/{action}/{id}」之上。另外對於它的價值,你可能想看看[Areas](http://msdn.microsoft.com/en-us/library/ee671793(v = vs.100).aspx),你會能夠使用帶/不帶'/ Admin'的catch all來分隔管理員和主控制器。 –

+0

再次感謝@Steve。由於「管理」部分中有許多路由,路由可能會非常迅速地變得非常臃腫。剛纔看了一下Area,看起來就像是專門爲這種場景設計的!非常感謝。 – Liming