这是我的导航层次结构。
我拥有所有人的控制权。这就是我的网址应该是什么样的
http://Localhost/Catalog/Collection/1 // return all collection for catalogeid 1
http://Localhost/Catalog/Media/1 // return all media for catalogeid 1
http://Localhost/Collection/Media/1 // return all media for collectionid 1
现在使用默认路线
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
它在我的“Catalog”控制器中寻找动作“Collection”,因为我已经在“Collection”Controller中定义了“List”方法,我不想在我的“Collection”中重新定义它 然后我尝试了这个
routes.MapRoute(
"Catalog_Collection_List", // Route name
"Catalog/Collection/{id}", // URL with parameters
new { controller = "Collection", action = "List", id = UrlParameter.Optional } // Parameter defaults
);
但结果是一样的。 另一个问题是如上所述如何生成链接。 我不能用
@Html.ActionLink("Collection","Collection", "List", new { id = 1 })
因为这会产生类似
的链接Localhost/Collection/List/1 //I don’t want
我的最终目标是与“收藏”相关的所有动作都应该在“收藏”控制器下。
我不知道我错过了什么。
希望我的问题很明确。
谢谢你的帮助。
修改 的
使我的问题更清楚。看看这个示例网址
localhost/Catalog/Media/1 // which gives media for catalog
localhost/Collection/Media/1 // which gives media for collection.
现在按照传统方式我必须在每个控制器中定义“媒体”动作。我不想要的。我想要的是基于URL我想从“媒体”控制器调用“列表”操作。 我希望这很清楚。
答案 0 :(得分:1)
我在这里遇到问题时有点困难。您不希望上面/ collection / list上的url,但这是您在操作链接中指定的内容。查看您的网址,您就会遇到一致性问题。
“它在我的”目录“表中查找动作”Collection“,因为我已经在”Collection“表中定义了方法”List“方法,我不想在我的”Collection“中重新定义相同然后我试过了这个“通过表我认为你的意思是控制器在这里吗?
所以你应该坚持使用一般Url = / Controller / Action / id的格式 收集/列表/ 1。
你绝对可以将它映射到其他地方(顺序肯定很重要 - 路由表中的第一个匹配胜利) - 但是问问自己到目前为止是否要偏离标准。
修改强> 我相信你想要这条路线,在你的其他路线之前添加它。
routes.MapRoute( "Catalog_Collection_List", // Route name "Catalog/Media/{id}", // URL with parameters new { controller = "Collection", action = "List", id = UrlParameter.Optional } // Parameter defaults );