1

我正在尝试使用 DynamicNodeProvider Base 动态创建我的站点地图,但我收到以下错误:

并非所有配置的节点都可以与父节点配对。检查您的父键以确保站点地图中存在具有相应键的节点。请注意,匹配区分大小写。

SiteMapCacheKey: 'sitemap://localhost/'

孤立节点:

父键:“产品”| 控制器:“产品”| 行动:“产品”| 区域:'' | URL: '/产品/产品/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;
            }
        }

    }

我已经阅读了教程,找不到与父节点相关的任何内容。任何帮助将不胜感激。

4

2 回答 2

2

您将“产品”指定为您的父键,但没有定义将“产品”作为其键的节点。您需要将某个节点的键显式设置为“Product”,以便 MvcSiteMapProvider 知道它们属于哪个父节点。

<mvcSiteMapNode title="Products" controller="Products" action="Index" key="Product">
于 2013-11-02T07:30:58.177 回答
2

最近将站点从 MVC4 升级到 MVC5 并突然遇到此错误 - 指向“主页”的所有内容都是孤立的。

破解打开 Mvc.sitemap 并更改:

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

...到:

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

问题解决了。大部分时间都花在寻找这篇文章上!感谢您在很久以前发布它。它仍然有帮助。:P

于 2015-03-31T13:09:21.747 回答