我想在sharepoint站点中隐藏一个快速启动节点,但它没有按预期工作。 :(
我的代码如下:
using (SPSite spSiteTest = new SPSite(serverUrl))
{
using (SPWeb mySite = spSiteTest.OpenWeb())
{
SPNavigationNodeCollection quickLaunchNodes = mySite.Navigation.QuickLaunch;
SPNavigationNode navQuickNode = new SPNavigationNode("Title", "www.stackoverflow.com", true);
foreach (SPNavigationNode node in quickLaunchNodes)
{
if (node.Title == navQuickNode.Title)
{
node.Url = navQuickNode.Url;
node.IsVisible = isVisible;
node.Update();
//mySite.Update();
return;
}
}
quickLaunchNodes.AddAsFirst(navQuickNode);
}
}
我错过了什么或者它是一个错误?
答案 0 :(得分:1)
您可以删除这样的节点:
node.Delete();
mySite.Update();
或检查this post中提及的ExcludeFromNavigation
方法(其作者建议通过将IsVisible
设置为false
无法隐藏导航节点是SharePoint错误,太)。
答案 1 :(得分:0)
PortalNavigation Class为此目的公开了以下方法:
<强>实施例强>
如何从当前导航中隐藏网站:
using (var site = new SPSite(siteUrl))
{
using (var web = site.OpenWeb())
{
var subWeb = web.Webs["Announcements"];
var publishingWeb = PublishingWeb.GetPublishingWeb(web);
publishingWeb.Navigation.ExcludeFromNavigation(false,subWeb.ID);
publishingWeb.Update();
}
}
不支持通过SharePoint CSOM修改导航设置。
关于SharePoint 2013 :
在SharePoint 2013中引入了一个新的 Microsoft.SharePoint.Client.Publishing和 CSOM中的Microsoft.SharePoint.Client.Publishing.Navigation名称空间 API。但不幸的是,它不支持修改导航 使用WebNavigationSettings class的设置,因为属性是 公开为只读。
对于CSOM,您可以使用代表SSOM PortalNavigation Class的CSOM对应的ClientPortalNavigation.cs class。请点击Access and Manipulate Navigation Settings via SharePoint Client Object Model帖子了解详情。
<强>实施例强>
如何从全局导航中隐藏页面:
using (var ctx = new ClientContext(webUri))
{
//Get page file
var pageFile = ctx.Web.GetFileByServerRelativeUrl("/news/Pages/Announcements.aspx");
ctx.Load(pageFile);
ctx.ExecuteQuery();
//Hide page from Global navigation
var navigation = new ClientPortalNavigation(ctx.Web);
navigation.ExcludeFromNavigation(true, pageFile.UniqueId);
navigation.SaveChanges();
}
如何从全局导航中隐藏网站:
using (var ctx = new ClientContext(webUri))
{
//Get sub site
var result = ctx.LoadQuery(ctx.Web.Webs.Where(w => w.Title == "Archive"));
ctx.ExecuteQuery();
var subWeb = result.FirstOrDefault();
//Hide web from Global navigation
var navigation = new ClientPortalNavigation(ctx.Web);
navigation.ExcludeFromNavigation(true, subWeb.Id);
navigation.SaveChanges();
}