3

我已經看到一些關於導航和麪包屑的文章,但沒有找到exaxt相同的問題。但如果有的話,請原諒並指向我。謝謝。MVC3導航和麪包屑 - 數據驅動

我的情況:

Interests     Profiles 
|      | 
|_Interest Area 1    |-Profile Area 1 
| |      | 
| |_Interest Area 1.1    |_List of Books 
|  |      | 
|  |_List of Books     |_Book Detail 
|   | 
|   |_Book Detail 
|_Interest Area 2 
    | 
    |_List of Books 
     | 
     |_Book Detail 

層次結構存儲在數據庫中。入口點興趣和配置文件已修復。從那裏我不知道孩子會是什麼。

當沒有孩子離開了,根據最後的選擇(子)類的價值在書本中獲取的。

我這裏有兩個問題:第一個 :創建相應的路由。我想它的方式是:

/books/{id}/{interestareaname}/{subinterestareaname}/{books}/{page} 

其中interestareaname添加用戶友好的URL,並不斷得到重複,只要你去了層次。那麼輸出將是: /書籍/ 1 /項目管理/ PRINCE2 /書籍/ 1 這顯示分頁末頁第1

對PRINCE2的書籍,但只有當一個級別的路線只包含一個interestareaname,從而成爲這樣的:

/book/{id}/{interestareaname}/{books}/{page} 

我所做的,解決問題的編號爲1:

routes.MapRoute(
     "Details", 
     "view/details/{id}/{booktitle}", 
     new { controller = "book", action = "Details", id = "*", booktitle= "*"}); 

    routes.MapRoute(
     "interests", 
     "books/{id}/{level1}/{level2}/{level3}/{page}", 
     new { controller = "book", action = "books", level1 = "*", level2 = "*", level3 = "*", id = "0", page = UrlParameter.Optional } 
    ); 
    routes.MapRoute(
     "profiles", 
     "books/{id}/{level1}/{level2}/{level3}/{page}", 
     new { controller = "book", action = "books", level1 = "*", level2 = "*", level3 = "*", id = "0", page = UrlParameter.Optional } 
    ); 

我這個最後說,一個最高級別應設置。那只是因爲我不知道如何使它更具活力。

現在的問題是區分利益類別和配置文件類別。我通過創建一個相同的路由,但使用不同的名稱,並在網站地圖創建中添加路由名稱。

我的第二個問題是網站地圖和麪包屑。 我使用MVCsitemapprovider和DynamicNodes功能。

隨着站點地圖,我有一個問題,顯示詳細信息頁面。因爲這些書會出現在個人資料和興趣上。有些書會出現在多個興趣領域或檔案中。 在每種情況下,我都希望看到我用來閱讀該書的路徑。

首先,我增加了對每本書的網站地圖的詳細信息頁面,但是那是瘋了。並創建網站地圖不能很好處理的重複條目。 其他選項是通過querystring將列表頁面上的routedata傳遞到詳細信息頁面,但看起來很糟糕,然後我添加了邏輯來解析查詢字符串以模仿麪包屑,這將很難,因爲我只有ID然後是最低級別。

我已經度過了很多夜,我仍然無法想象。如果有人能夠幫助或指引我正確的方向,我非常感激。

+0

由於其他路線從未到達(通過使用routedebugger發現),因此路線已縮減爲一條路線。通過使用UrlParameter.Optional來解決列表中分頁的問題。現在剩下的唯一問題就是在進入書籍的詳細頁面時顯示麪包屑。 – Mounhim 2012-02-06 22:06:20

回答

0

我迄今發現我自己是真正創造一切可能的途徑,就像唯一的解決辦法:

 routes.MapRoute(
      "interest", 
      "interest", 
      new { controller = "books", action = "viainterest"}, 
      new { controller = "books", action = "viainterest" } 
     ); 

     routes.MapRoute(
      "interest_1_details", 
      "interest/{level1}/view/{id}/{booktitle}", 
      new { controller = "books", action = "detailsviainterest_1, level1 = "*", id = 0, booktitle = "*" }, 
      new { controller = "books", action = "detailsviainterest_1" } 
     ); 

     routes.MapRoute(
         "interest2details", 
         "interest/{level1}/{level2}/view/{id}/{booktitle}", 
         new { controller = "books", action = "detailsviainterest_2", level1 = "*", level2 = "*", id = 0, booktitle = "*" }, 
         new { controller = "books", action = "detailsviainterest_2" } 
        ); 


     routes.MapRoute(
         "interestlevel_1", 
         "interest/{id}/{level1}", 
         new { controller = "books", action = "viainterestlevel_1, level1 = "*", id = 0 }, 
         new { controller = "books", action = "viainterestlevel_1"} 
        ); 

     routes.MapRoute(
         "interestlevel_2", 
         "interest/{id}/{level1}/{level2}", 
         new { controller = "books", action = "viainterestlevel_2", level1 = "*", level2 = "*", id = 0 }, 
         new { controller = "books", action = "viainterestlevel_2} 
        ); 
     //and so on for level 3 and for profiles etc. 

在我加入所有的類別分級,並添加所有項目DynamicNodeManager。現在我得到一個體面的麪包屑一直到詳細信息頁面。並且由於每個詳細信息頁面的路徑(routedata和actions)都不相同,即使是出現在幾個類別中的書籍也會顯示正確的麪包屑。

這解決了我的問題,但我仍然認爲應該有更好的方法。目前解決方案的問題是,由於添加到nodecollection中的詳細項目,樹會變得很大。另一個缺點是樹在應用程序啓動時生成。因此,添加新書籍不會創建節點,直到我重置Web應用程序。

所以,如果還有其他建議,我很高興看到他們。現在,我可以繼續處理內容,而最終的內容就是這些內容。