2011-06-21 51 views
6

我正在嘗試爲我的站點開發站點地圖,以便在需要時維護URL參數。我正在使用MvcSiteMapProvider並嘗試使用動態節點來保存各個節點的路由數據。但是,我遇到的問題是動態節點的孩子。當我在我的站點地圖文件中的動態節點中嵌套節點時,它不會顯示在使用Html.MvcSiteMap()。SiteMap()生成的站點地圖上,當我導航到頁面時,我會丟失所有面包屑動態節點。MvcSiteMapProvider - 動態節點的孩子不會顯示在麪包屑或站點地圖中

例如,如果我的動態節點被稱爲「人員詳細信息」,麪包屑看起來像這樣的人員詳細信息頁上:

Home > People > Person Details 

但只要我再導航到該頁面,說:「跟Person「,麪包屑看起來像這樣:

Person Details > Contact Person 

沒有前兩個路徑。另外,如果我嘗試導航回「個人詳細信息」,則不會保留任何網址參數(例如,而不是去http://localhost:55555/Home/People/PersonDetails?id=12,它會去http://localhost:55555/Home/People/PersonDetails)。

當我嘗試使用Html.MvcSiteMap()。SiteMap()顯示整個站點地圖時,它會輸出正確的層次結構,直到動態節點。站點地圖爲在動態節點提供程序中找到的每個「Person」節點列出唯一節點,但不顯示動態節點的任何子節點。

我的網站地圖看起來是這樣的(略):

<?xml version="1.0" encoding="utf-8" ?> 
<mvcSiteMap xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-3.0" enableLocalization="true"> 
    <mvcSiteMapNode title="Home" controller="Home" action="Index"> 
    <mvcSiteMapNode title="People" controller="Information" action="People"> 
     <mvcSiteMapNode title="Person Details" controller="Information" action="PersonDetails" dynamicNodeProvider="MySite.Code.PersonDetailsDynamicNodeProvider, MySite"> 
     <mvcSiteMapNode title="Contact Person" controller="Information" action="Contact" /> 
     </mvcSiteMapNode> 
    </mvcSiteMapNode> 
    </mvcSiteMapNode> 
</mvcSiteMap> 

我的動態節點商看起來是這樣的:

public class PersonDetailsDynamicNodeProvider : DynamicNodeProviderBase 
{ 
    List<Person> people = proxy.GetPeople(); 

    public override IEnumerable<DynamicNode> GetDynamicNodeCollection() 
    { 
     var nodes = new List<DynamicNode>(); 

     foreach (var person in people) 
     { 
      DynamicNode node = new DynamicNode(); 
      node.RouteValues.Add("id", person.ID); 

      nodes.Add(node); 
     } 

     return nodes; 
    } 

    static private PersonServiceClient proxy = new PersonServiceClient(); 
} 

有什麼我失蹤?我感覺到我剛剛留下了一些東西,但我對網絡開發很陌生,在這一點上真的只是在黑暗中捅了捅。

回答

8

您不需要動態節點提供程序。

<mvcSiteMapNode title="Person Details" controller="Information" action="PersonDetails" preservedRouteParameters="id"> 
    <mvcSiteMapNode title="Contact Person" controller="Information" action="Contact" /> 
</mvcSiteMapNode> 

對你正在做的事情正常工作。

相關問題