1

DynamicNodeProvider Base を使用してサイト マップを動的に作成しようとしていますが、次のエラーが表示されます。

すべての構成済みノードを親ノードとペアにすることができませんでした。親キーを調べて、対応するキーを持つノードが SiteMap に存在することを確認してください。一致では大文字と小文字が区別されることに注意してください。

SiteMapCacheKey: 'sitemap://localhost/'

孤立したノード:

ParentKey: '商品' | コントローラ: '製品' | アクション: '製品' | エリア: '' | URL: '/製品/製品/製品 1' | キー: '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

最近サイトを 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 に答える
2

「製品」を親キーとして指定していますが、「製品」をキーとして持つノードが定義されていません。MvcSiteMapProvider がノードが属する親ノードを認識できるように、どこかのノードのキーを明示的に「製品」に設定する必要があります。

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