2013-11-01 23 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

相关问题