首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问Sharepoint SPNavigationNode.QuickLaunch属性?

如何访问Sharepoint SPNavigationNode.QuickLaunch属性?
EN

Stack Overflow用户
提问于 2009-03-24 04:22:35
回答 3查看 3.3K关注 0票数 3

我有一个如下的网站:

--站点A

-Subsite1

-Subsite2

现在,每当我试图访问QuickLaunch属性时,它总是空的。

代码语言:javascript
复制
SPNavigation nav = spWeb.Navigation;
if (nav.QuickLaunch.Count == 0)
{
      // ALWAYS TRUE
}

但是,如果我进入SiteA的导航设置(通过UI)并重新排序列表中的任何站点,只有到那时QuickLanuch才可用。(其他设置保留为默认设置)

有人能解释这种行为吗?我真的需要访问QuickLaunch项目。

谢谢

EN

回答 3

Stack Overflow用户

发布于 2015-09-01 16:45:20

如果在网站正在执行created.Below代码时访问quicklaunch,则会发生此错误。这会导致功能激活的代码等待网站集创建完成后再执行。

代码语言:javascript
复制
using System.Threading;


public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
        //Queues changes until after site exists.  For use in provisioning.
        SPWeb web = properties.Feature.Parent as SPWeb;
        ThreadPool.QueueUserWorkItem(ApplyYourChanges, web.Url);
    }

private void ApplyYourChanges(object state)
    {
        string webUrl = state as string;
        Uri uri = new Uri(webUrl);

        // additional conditions here -- perhaps check if a feature was activated
        while (!SPSite.Exists(uri))
        {
            Thread.Sleep(5000);
        }
        using (SPSite site = new SPSite(webUrl))
        {
            using (SPWeb web = site.OpenWeb())
            {
                //configure the quicklaunch menu
                configureQuickLaunch(web);
            }
        }
    }

public static void configureQuickLaunch(SPWeb spWeb)
    {            
        SPNavigationNodeCollection nodeCollection = spWeb.Navigation.QuickLaunch;
        SPNavigationNode heading = nodeCollection.Cast<SPNavigationNode>().FirstOrDefault(n => n.Title == headingNode);
        SPNavigationNode item = heading.Children.Cast<SPNavigationNode>().FirstOrDefault(n => n.Url == url);
            if(item == null)
            {
                item = new SPNavigationNode(nodeName, url);
                item = heading.Children.AddAsLast(item);
            }
    }
票数 1
EN

Stack Overflow用户

发布于 2009-03-24 14:26:57

我似乎记得在某处读到过QuickLaunch集合只存储默认顺序的定制。环顾四周,我找不到可以向您展示的文档,但它可以解释您看到的行为。

因此,您的QuickLaunch.Count == 0只是确认项目的默认排序已就绪。你仍然可以添加节点,如果这样做有帮助的话;

代码语言:javascript
复制
SPNavigationNodeCollection nodes = web.Navigation.QuickLaunch;
SPNavigationNode node = new SPNavigationNode("Node Name", "Node URL", true);
nodes.AddAsFirst(node);
票数 0
EN

Stack Overflow用户

发布于 2009-03-24 15:27:30

我认为,默认情况下,QuickLaunch使用共享导航。换句话说,子站点的QuickLaunch在您使用它之前没有自己的节点集合。如果您对站点进行重新排序,则会为其提供自己唯一的一组节点。

如果您希望以编程方式将QuickLaunch设置为具有自己的节点集,则应该能够这样做:

代码语言:javascript
复制
SPNavigation nav = spWeb.Navigation;  
nav.UseShared = false;  
spWeb.Update();  

我认为此时您的计数应该不是零。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/676155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档