2011-11-30 61 views
0

我有SharePoint站点,我想在代码中读取全局导航信息。sharepoint 2010无法在代码中获得全局导航节点

在属性页:

/_layouts/AreaNavigationSettings.aspx 我补充说: “位置”, “组织”, “98” 的节点。

enter image description here

但是,当我试图让那些节点代码

using (var site = new Microsoft.SharePoint.SPSite(URL)) 
      { 
       using (var currentWeb = site.OpenWeb()) 
       { 
       return currentWeb.Navigation.GlobalNodes; 

      } 

}

我一直在这些节点:

  • 首页
  • 快速启动
  • 的SharePoint顶部导航栏

为什么我有那些奇怪的节点,如何获得真正的globan naviigation /?

回答

2

SharePoint的导航是分层的。该层次结构具有三个节点:

  • 首页 - 表示左上角的单个“主页”图标;
  • 快速启动 - 表示页面左侧的快速启动菜单;
  • 顶部导航栏 - 代表页面顶部的导航栏。

你必须深入到这些节点的子节点找到自己的三个节点 - 看到SPNavigationNode.Children属性。 SharePoint缺少导航节点的唯一标识符,因此您必须依赖标题(显示名称)。


UPDATE:同时请注意,您的代码包含一个严重的设计缺陷。您将返回逻辑上嵌套在SPWeb实例存在范围之外的SPWeb的对象 - 即,出于using声明。虽然这可能适用于导航节点,但这种行为通常会导致错误。这些错误通常由SharePoint内部处理,并且仅在记录的错误消息中产生“结果”,但这确实代表了您的代码应该生成的内容。

+0

我联系,提出有,但只有等环节。我也可以从PublishingWeb.GetPublishingWeb(currentWeb).Navigation.GlobalNavigation获得链接但是那里有很多垃圾!我没有添加。如何知道哪些链接来自“全球导航”类别以及刚刚添加的哪个共享点? – Evgeny

+1

什么是垃圾?如果您以编程方式添加导航节点,则可以将自定义属性添加到节点的属性包中,以保留一些唯一的ID。 –

+0

垃圾我的意思是在sharepoint中,我只看到“位置”“组织”和“98”节点,但在代码中我有12-13个或更多!因为真正的垃圾被提取。这就是为什么我讨厌分享点! )我已经发现我可以按类型过滤项目。所以我只会得到我需要的节点。将很快发布部分代码。 – Evgeny

1

这个工作对我来说:

var pubWeb = PublishingWeb.GetPublishingWeb(web); 
foreach (SPNavigationNode navigationNode in pubWeb.Navigation.GlobalNavigationNodes) 
{ 
    //do stuff 
} 
+1

这应该如何帮助OP? –