SPNavigationNode.IsVisible属性不能按预期在sharepoint中工作

时间:2010-04-12 18:09:15

标签: c# .net sharepoint

我想在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);

                }
            }

我错过了什么或者它是一个错误?

2 个答案:

答案 0 :(得分:1)

您可以删除这样的节点:

node.Delete();
mySite.Update();

或检查this post中提及的ExcludeFromNavigation方法(其作者建议通过将IsVisible设置为false无法隐藏导航节点是SharePoint错误,太)。

答案 1 :(得分:0)

如何使用SharePoint Server Side Object Model(SSOM)显示/隐藏导航节点

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 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();
 }