2011-11-03 84 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,感謝我的編輯 –

相關問題