有多个控制器名称的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,我想从"媒体"控制器调用"列表"动作。

有多个控制器名称的MVC3路由问题

我有点难以理解这里的问题。你不想要上面的url/collection/list,但这是你在动作链接中指定的。看看你的url,你有一个一致性问题开始。

"它在我的"目录"表中寻找动作"集合",因为我已经在"集合"表中定义了方法"列表"方法,我不想在我的"集合"中重新定义相同的方法,然后我尝试了这个"表",我认为你的意思是这里的控制器?

所以你应该坚持一般的Url =/Controller/Action/id的格式收集/清单/1 .

你完全可以将它映射到其他地方(顺序当然很重要——路由表中第一个匹配的优先)——但是问问你自己,到目前为止你是否想偏离标准。

编辑我相信你想要这条路线,把它放在你的其他路线之前。

<>之前路线。MapRoute ("Catalog_Collection_List",//路由名"Catalog/Media/{id}",//带参数的URLnew {controller = "Collection", action = "List", id = UrlParameter。可选}//参数默认值);