2013-11-01 29 views
0

我試圖使用DynamicNodeProvider基地動態創建我的網站地圖,我收到以下錯誤父節點配對。檢查你的父母密鑰以確保在SiteMap中存在具有相應密鑰的節點。請注意,該匹配區分大小寫。mvcsitemapprovider不是所有配置的節點可以與

SiteMapCacheKey: '網站地圖://本地主機/'

的孤兒節點:

ParentKey: '產品' |控制器:'產品'|行動:'產品'|區域:''|網址:'/ Products/Product/Product1'|鍵:'05633af0-b362-411b-856b-5e16b8ed1fbd'|來源:'company.infrastructure.ProductsDynamicNodeProvider,項目'

該錯誤提供了我的所有產品的完整列表,所以我可以告訴它它試圖加載完整的目錄,但我錯過了一個配對的地方。

這裏是我的Mvc.sitemap

<mvcSiteMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0" 
      xsi:schemaLocation="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0 MvcSiteMapSchema.xsd"> 

    <mvcSiteMapNode title="Home" controller="Home" action="Index"> 
    <mvcSiteMapNode title="Products" controller="Products" action="Index"> 
     <mvcSiteMapNode title="Details" controller="Products" action="Product" dynamicNodeProvider="MWH2.infrastructure.ProductsDynamicNodeProvider, MWH2"/> 
    </mvcSiteMapNode> 
    <mvcSiteMapNode title="About" controller="Home" action="About"/> 
    <mvcSiteMapNode title="Careers" controller="Careers" action="Index"/> 
    <mvcSiteMapNode title="Literature" controller="Literature" action="Index"/> 
    <mvcSiteMapNode title="Locations" controller="Locations" action="Index"/> 
    <mvcSiteMapNode title="Customer Service" controller="Customers" action="Index"/> 

    </mvcSiteMapNode> 

</mvcSiteMap> 

ProductsDynamicNodeProvider.cs

public class ProductsDynamicNodeProvider : DynamicNodeProviderBase 
    { 
     public override IEnumerable<DynamicNode> GetDynamicNodeCollection(ISiteMapNode node) 
     { 
      ProductModel model = new ProductModel(); 
      using (var prodDB = new MWH2Data()) 
      { 
       model.Product = (from prod in prodDB.Products select prod).ToList(); 
      } 

      foreach(var p in model.Product) 
      { 
       DynamicNode dynamicNode = new DynamicNode(); 
       dynamicNode.Title = p.ProductName; 
       dynamicNode.ParentKey = "Product"; 
       dynamicNode.RouteValues.Add("id", p.ProductCleanLink); 

       yield return dynamicNode; 
      } 
     } 

    } 

我已經在教程和無法找到與父節點什麼。任何援助將不勝感激。

回答

1

您正在指定「Product」作爲您的父鍵,但沒有定義以「Product」作爲其鍵的節點。您需要明確地將某個節點的密鑰設置爲「Product」,以便MvcSiteMapProvider知道它屬於哪個父節點。

<mvcSiteMapNode title="Products" controller="Products" action="Index" key="Product"> 
+0

非常感謝一噸。標記爲已回答。 –

1

最近從MVC4升級到MVC5的站點,突然遇到了這個錯誤 - 所有指向「Home」的東西都是孤兒。

裂了開來Mvc.sitemap和改變:

<mvcSiteMapNode title="Home" controller="Home" action="Index"> 

...到:

<mvcSiteMapNode title="Home" controller="Home" action="Index" key="Home"> 

問題解決了。大部分時間都花在尋找這篇文章上!感謝您在很久以前發佈它。它仍然在幫助。 :P

相關問題