1

MaartenBalliauwによるASP.NETMVCSiteMapProviderを使用しています。

ヘルパーを使用してメインナビゲーションとブレッドクラムを表示します。時々、レンダリングされたページから完全に消えることに気づきました。

ローカル環境では、プロジェクトを再構築し、ブラウザの現在のページから移動して元に戻す必要があります。本番環境では、サイトDLLを再アップロードする必要があることがわかりました。これらの「修正」自体は、さまざまな成功でのみ機能します。

「わずかな」パターンがありますが、確認されていません。この問題は、ビューを編集またはアップロードしたときに発生します。

どんな助けでも大歓迎です。これが私のコードの一部です:

サイトマップファイルの一部:

  <mvcSiteMapNode title="Home" controller="Home" action="Index" key="home">
    <mvcSiteMapNode title="About us" controller="about" action="index" key="about">
      <mvcSiteMapNode title="Our Approach" controller="about" action="approach" url="/about/our-approach" imageUrl="/content/images/ourApproachNavImg.jpg" />
    </mvcSiteMapNode>

    <mvcSiteMapNode title="News" controller="news" action="index" key="news" showSubNav="false">
      <mvcSiteMapNode dynamicNodeProvider="XXX.Helpers.NewsItemDynamicNodeProvider, KDC" title="" />
    </mvcSiteMapNode>
  </mvcSiteMapNode>

ヘルパー:

@Html.MvcSiteMap().Menu(false, true, false)
@Html.MvcSiteMap().SiteMapPath()

dynamicNodeProvider:

public override IEnumerable<DynamicNode> GetDynamicNodeCollection()
        {
            var returnValue = new List<DynamicNode>();
            var newsItemService = DependencyResolver.Current.GetService<INewsItemService>();

            foreach (var item in newsItemService.GetAll(true, true))
            {
                DynamicNode node = new DynamicNode();
                node.Title = item.Title;
                node.Action = "detail";
                node.RouteValues.Add("url", item.Url);
                returnValue.Add(node); 
            }

            return returnValue;
        }

web.configのMvcSiteMapProviderは標準に準拠しており、変更されていません。

4

1 に答える 1

0

MvcSiteMapProvider v3には、このような問題を引き起こす多くのスレッド化とキャッシュの問題がありました。MvcSiteMapProvider v4では、スレッドセーフが向上し、キャッシュされたサイトマップが読み取り専用になり、1人のユーザーのナビゲーションが他のユーザーに影響を与えないため、これらの問題は発生しなくなりました。

于 2013-09-02T21:54:18.517 に答える