我想我仍然不明白路線。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
什麼給?
謝謝@steve。所以你說,對於「ProjectGroups」,我應該將/Admin/ProjectGroups/...controller="ProjecGroups「指定爲正確的?就像我對「/ Admin/Overview」所做的一樣? HTMl.ActionLink()呢?它仍然生成錯誤的網址。 [編輯 - 沒關係。現在我指定了明確的路由/控制器]。 – Liming
@Liming完全正確。您應該添加額外的管理路線。如果它仍然生成錯誤的URL,請確保它在所有的「{controller}/{action}/{id}」之上。另外對於它的價值,你可能想看看[Areas](http://msdn.microsoft.com/en-us/library/ee671793(v = vs.100).aspx),你會能夠使用帶/不帶'/ Admin'的catch all來分隔管理員和主控制器。 –
再次感謝@Steve。由於「管理」部分中有許多路由,路由可能會非常迅速地變得非常臃腫。剛纔看了一下Area,看起來就像是專門爲這種場景設計的!非常感謝。 – Liming