0

SharePoint の一連のナビゲーション ノードのすべての子ノードを返そうとしています。SDK は、次のようなことを行う必要があることを意味します。

NodeColl = objSite.Navigation.TopNavigationBar 
Dim Node as SPNavigationNode

For Each Node In NodeColl
  if Node.IsVisible then
    Response.Write("<siteMapNode url=""" & Node.Url & """ title=""" & Node.Title & """  description=""" & Node.Title & """ >" & Environment.NewLine)
    Dim SubChildNodes as SPNavigationNodeCollection = Node.Children
    Response.Write(SubChildNodes.Count) 'returns 0 always even though I know theres over 20 nodes in some of the sections
    Dim ChildNode as SPNavigationNode
    For Each ChildNode in SubChildNodes
      if ChildNode.IsVisible then
        Response.Write("<siteMapNode url=""" & ChildNode.Url & """ title=""" & ChildNode.Title & """  description=""" & ChildNode.Title & """ />" & Environment.NewLine)
      End if
    Next
    Response.Write("</siteMapNode>" & Environment.NewLine)
  End If
Next

ただし、いつでもトップレベルのナビゲーションノードがリストされますが、子を表示できません。

4

2 に答える 2

0

私は同じ問題に直面していました:SPWeb.Navigation.Quicklaunchonet.xmlからアクティブ化されたWebスコープ機能の機能レシーバーからアクセスしようとしSPWeb.Navigation.QuickLaunch.Countましたが、同じonetで以前にアクティブ化された他の機能にリストインスタンスを確実に追加したにもかかわらず、常に0でした.xml。

私にとっての解決策は、機能レシーバーで新しいSPSiteと新しいSPWebを開くことでした。その後、クイック起動アイテムにアクセスできるようになりました。たとえば、これは私のために働いた:

using (SPSite site = new SPSite("http://yourserver/"))
{
  using (SPweb web = site.OpenWeb("theweb"))
  {
    web.Navigation.QuickLaunch.Count ; // greater than zero

    // manipulate your quick launch here
  }
}

これは、新しいSPWebオブジェクトを作成すると、データベースからWebの最新の状態が読み込まれ、機能レシーバーに渡されたSPWebが最新の状態を表していないためだと思います。しかし、これは私が推測するものです

于 2012-04-03T05:35:35.213 に答える
0

私はこれと同じ問題を抱えています、私は解決策を見つけました

using (SPSite site = new SPSite("http://server"))
{
    using (SPWeb web = site.OpenWeb())
    {
        SPNavigationNode quicklaunch = web.Navigation.GetNodeById(1025);
        if (quicklaunch != null)
        {
            foreach (SPNavigationNode heading in quicklaunch.Children)
            {
                PrintNode(heading);
            }
        }
    }
}

static void PrintNode(SPNavigationNode node)
{
    foreach (SPNavigationNode item in node.Children)
        PrintNode(item);
}

SiteMapDataSourceマスター ページのクイック起動に関連付けられていることを確認してください。

于 2011-01-07T07:15:32.997 に答える