2016-11-10 177 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 
相关问题