2016-11-10 188 views
0

我有2個相同的名稱控制器,ShopController,一個是normal控制器(基本上你通常把它們放在哪裏),另一個在Admin區域。路由相同的名稱控制器和不同的區域

這裏是我的路線:

routes.MapRoute("Shop", "shop/{action}/{id}", new { controller = "Shop", action = "Index", id = UrlParameter.Optional }, new[] { "CMS.Controllers" }); 
routes.MapRoute("CategoriesrPartial", "Admin/Shop/CategoriesNavPartial", new { controller = "Shop", action = "CategoriesNavPartial" }, new[] { "CMS.Areas.Admin.Controllers" }); 

底部應該被連接到Admin地區之一,最上面的一個到正規之一。

我試着在這裏添加基於另一個答案的命名空間,但它們沒有什麼區別,即使我在其中添加一些亂碼也沒有什麼區別。

我該如何讓這些路線指向我想要的確切控制器?

+0

爲什麼你甚至需要第二個路由註冊?路由模式匹配路由約定('areaname/controllername/actionmethod') – Shyju

+0

由於我從一開始就沒有遵循路由約定,所以每個新的控制器都需要一個新的路由。 – frc

+0

我會建議添加一個'area =「Admin」'到管理路由的默認值。或者在你的'AdminAreaRegistration.cs'文件中包含這個 – Bwolfing

回答

0

將路線添加到路線集合的順序非常重要,引擎將查看該路線集合,並且將匹配該路線的第一個將被選爲勝利者。

如果您的第一條路線匹配,意味着它以店鋪開始,那麼它將撞上控制器Shop,否則它將繼續匹配RouteData集合上的結構。沒有必要在這種情況下添加命名空間

shop/{action} -> should start with shop word then you need to specify the action in your anonymous object 
相關問題