1

OK - PortalSiteMapProviderを継承するカスタム ナビゲーション プロバイダーを作成し、GetChildNodes メソッドを使用してクラスを拡張しようとしています (簡単な例はこちら)。

基本的に私がやろうとしているのは、現在の SPWeb の SiteLogoUrl 文字列を各 SPWeb のそれぞれの SiteMapNode の属性 (imgurl と呼ばれる) として追加し、後でカスタム メニュー コントロール (SharePoint:AspMenu を継承する) でこの値を取得するビューを追加することです。

GetChildNodes の下のプロバイダーで次のように属性を設定しています。

public override SiteMapNodeCollection GetChildNodes(SiteMapNode node)
    {
        PortalSiteMapNode portalNode = (PortalSiteMapNode)node;
        if (portalNode != null)
        {
            if (portalNode.Type == NodeTypes.Area)
            {
                SiteMapNodeCollection nodeColl = base.GetChildNodes(portalNode);

                using (SPSite currentSite = new SPSite(portalNode.PortalProvider.CurrentSite.Url))
                {
                    foreach (SiteMapNode topLevelNode in nodeColl)
                    {
                        foreach(SiteMapNode currentNode in topLevelNode.ChildNodes)
                        {
                            string currentWebUrl = currentNode.Url.Substring(0, currentNode.Url.ToLower().IndexOf("/pages/"));
                            using (SPWeb currentWeb = currentSite.OpenWeb(currentWebUrl))
                            {
                                if (!string.IsNullOrEmpty(currentWeb.SiteLogoUrl))
                                {
                                    currentNode["imgurl"] = currentWeb.SiteLogoUrl;
                                }
                            }                            
                        }
                    }
                }

                return nodeColl;
            }

これで、これをデバッグして、挿入された値を取得できます (x はノードのインデックスで、コマンド ウィンドウでこれを実行しています)。

? topLevelNode.ChildNodes[x]["imgurl"]

そして、それは画像のURLを返します: "/_layouts/images/myimage.jpg"

今.. カスタム メニュー コントロールでこれを実行しようとすると、最初に次のようにカスタム ナビゲーション プロバイダーのハンドルを取得します。

                CustomNavProvider customProvider = (CustomNavProvider)SiteMap.Providers["CustomNavProvider"];
                SiteMapNode currentNode = customProvider.FindSiteMapNode(childitem.NavigateUrl);

currentNode 変数には SiteMapNode が含まれるようになりました...すばらしいですが、以前に追加した属性の代わりに、「AlternateUrl」という属性が 1 つだけになりました。プロバイダーに追加した imgurl 属性は消えています。title、desc などの他のすべてのプロパティが存在するため、正しいノードが確実に返されます。

ここで私の問題は何ですか?属性をプロバイダーのノードに追加したときに、属性が保持されていませんか?

ヘルプや提案をいただければ幸いです。

4

0 に答える 0