2014-02-25 47 views
0

我是MvcSiteMapProvider的新手。我已經完成了基礎知識,並明白我必須設置我的mvc.sitemap xml才能讓麪包屑工作。MvcSiteMapProvider - 瞭解dynamicnodes

現在我希望能夠在點擊鏈接時添加動態節點。 例如當我在類別表格中點擊Apple時:電話。我想能夠顯示電話> Apple

到目前爲止,我已經隨處可見這種方法:

public class FBDynamicNodeProvider : DynamicNodeProviderBase 
{   
    public override IEnumerable<DynamicNode> GetDynamicNodeCollection(ISiteMapNode mapnode) 
    { 
     var returnValue = new List<DynamicNode>(); 
     DynamicNode node = new DynamicNode(); 
     node.Title = "Nodedummytitle"; 
     node.Controller ="Phones"; 
     node.Action = "Index"; 
     node.RouteValues.Add("id", 1); 
     node.ParentKey = "PhonesCategory"; 
     node.Key = "PhonesList"; 
     returnValue.Add(node); 

     return returnValue; 
    } 
} 

但我真的不知道如何得到這個工作。我已經嘗試調試它,getdynamicnodecollection方法被調用,但我沒有看到麪包屑。我究竟做錯了什麼?有人可以分享一個示例鏈接,這將有助於我實現這一目標嗎?

編輯1: 我通過識別什麼是我網站/ sitemap.xml的解決了這個。 顯然麪包屑是生成的,但不會顯示,因爲不正確的uri.All我所要做的是使URI類似於我的XML中,它的工作就像一個魅力。

現在我遇到了一個問題,其中我不知道該如何解決我自己的問題,如我的另一個SO Question's here

請指導我。 謝謝

回答

0

首先,術語「動態節點」有點誤導。節點不是動態的,它們是基於(可能)動態數據源的靜態節點。這意味着它們在應用程序啓動時(以及緩存到期時)加載並存儲在共享緩存中。但它們可以基於外部來源,如文件或數據庫。其次,節點的匹配行爲是需要一些理解才能實現的。獲取沒有自定義參數的路由非常簡單,但是當您爲路由添加「id」或其他自定義鍵時,還必須將其添加到節點的RouteValues字典中,以確定「當前節點」。默認情況下,您需要爲每個「id」(通常使用動態節點完成)添加一個節點。

<mvcSiteMapNode title="Project 1" controller="Project" action="Details" id="1"> 
<mvcSiteMapNode title="Project 2" controller="Project" action="Details" id="2"> 
<mvcSiteMapNode title="Project 3" controller="Project" action="Details" id="3"> 

有,如果你只是想製造一些假的麪包屑去與管理頁面該編輯數據行之有效的另一種選擇。這將使節點始終匹配路由密鑰,而不管其值如何,這通常是執行CRUD操作的管理頁面的理想解決方案。

<mvcSiteMapNode title="Edit Project" controller="Project" action="Edit" preservedRouteParameters="id"> 

要詳細瞭解這些選項,請閱讀帖子How to Make MvcSiteMapProvider Remember a User's Position