2011-11-03 44 views
0

这是我的导航层次结构。带有多个控制器名称的MVC3的路径问题

  • 目录
    -Collection
    - 媒体
    - 属性
    - 用户
  • 收集
    - 媒体
    - 产品
    - 属性

我有控制器所有。这是我的网址应该是什么样子

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 

链接我的最终目标是,所有的行动与“收藏”应该在“收藏”控制器去。 我不知道我错过了什么。 希望我的问题很清楚。 感谢您的任何帮助。
编辑
使我的问题更清楚。看看这个示例网址

localhost/Catalog/Media/1 // which gives media for catalog 
localhost/Collection/Media/1 // which gives media for collection. 

现在根据传统的方式,我必须在每个控制器中定义“媒体”行动。我不想要。我想要的是基于URL我想调用“媒体”控制器“列表”行动。 我希望这很清楚。

+0

您是否尝试更改路线的顺序?这很重要 –

+0

thx @Emmanuel。我不明白这一点。我必须改变的顺序是什么? – Nnp

+0

您的路线被添加到global.asax上的顺序,[检查此](http://www.freddes.se/2009/12/09/the-importance-of-the-order-of-routes-in -asp-net-mvc /) –

回答

1

我在这里遇到了一些难题。你不想要上面的url/collection/list,但这是你在动作链接中指定的。看着你的URL,你有一个一致性问题开始。

“它在我的”Catalog“表中寻找动作”Collection“,因为我已经在”Collection“表中定义了方法”List“方法,我不想在我的”Collection“中重新定义它,试过这个“按表我认为你的意思是控制器在这里吧?

所以你应该坚持一般的格式Url =/Controller/Action/id Collection/List/1。

你可以绝对把它映射到别的地方(而且顺序肯定很重要 - 你的路由表中的第一个匹配是胜出的) - 但问问你自己是否想要偏离标准。

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

 
routes.MapRoute(
      "Catalog_Collection_List", // Route name 
      "Catalog/Media/{id}", // URL with parameters 
      new { controller = "Collection", action = "List", id = UrlParameter.Optional } // Parameter defaults 
     ); 
+0

谢谢@亚当。我编辑了我的问题。让我知道如果它没有更多的意义。 – Nnp

+0

我这样做的原因是为了避免混淆用户是否正在收藏媒体或目录媒体。 – Nnp

+0

感谢Adam和Emmanuel,感谢我的编辑 –

相关问题