有多个控制器名称的MVC3路由问题
本文关键字:MVC3 路由 问题 控制器 | 更新日期: 2023-09-27 18:13:05
这是我的导航层次结构。
- 目录
- collection
- Media
- Attributes
- User -
集合-媒体
-产品
-属性
我有controller for all。这就是我的url的样子
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
);
它在我的"目录"控制器中寻找动作"集合",因为我已经在"集合"控制器中定义了"列表"方法,我不想在"集合"中重新定义相同的方法然后我试了这个
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
我的最终目标是所有与"Collection"相关的操作都应该在"Collection"控制器下。我不知道我错过了什么。希望我的问题很清楚。谢谢你的帮助。
编辑
让我的问题更清楚。看一下这个示例url
localhost/Catalog/Media/1 // which gives media for catalog
localhost/Collection/Media/1 // which gives media for collection.
现在按照传统的方式,我必须在每个控制器中定义"媒体"动作。这是我不想要的。我想要的是基于URL,我想从"媒体"控制器调用"列表"动作。
我有点难以理解这里的问题。你不想要上面的url/collection/list,但这是你在动作链接中指定的。看看你的url,你有一个一致性问题开始。
"它在我的"目录"表中寻找动作"集合",因为我已经在"集合"表中定义了方法"列表"方法,我不想在我的"集合"中重新定义相同的方法,然后我尝试了这个"表",我认为你的意思是这里的控制器?
所以你应该坚持一般的Url =/Controller/Action/id的格式收集/清单/1 .
你完全可以将它映射到其他地方(顺序当然很重要——路由表中第一个匹配的优先)——但是问问你自己,到目前为止你是否想偏离标准。
编辑我相信你想要这条路线,把它放在你的其他路线之前。
<>之前路线。MapRoute ("Catalog_Collection_List",//路由名"Catalog/Media/{id}",//带参数的URLnew {controller = "Collection", action = "List", id = UrlParameter。可选}//参数默认值);