【问题标题】:Site Collection Node Iteration Issue in SharePoint 2010SharePoint 2010 中的网站集节点迭代问题
【发布时间】:2011-07-01 22:55:18
【问题描述】:

我在 SharePoint 中遍历我的网站集以进行自定义导航。但我试图只允许迭代从 /sites/ 之后的一层深处输出节点。例如,网站/IT。

目前,我的方法是遍历所有节点。例如,站点/IT/支持。

private void GetSiteChildNodes(string siteName)
    {
        SPSecurity.RunWithElevatedPrivileges(delegate()
        {
            foreach (SPSite site in SPContext.Current.Site.WebApplication.Sites)
            {
                try
                {
                    if (SPSite.Exists(new Uri(site.Url)) && site.ServerRelativeUrl.StartsWith(String.Format("/sites/{0}/", siteName)))
                    {
                        SPWeb subSites = site.RootWeb;

                        foreach (SPWeb cn in subSites.Webs)
                        {                                
                            navBuilder.AppendFormat("<li><a href=\"{0}\">{1}</a></li>", cn.Url, cn.Title);
                        }                            
                    }
                }
                finally
                {
                    site.Dispose();
                }
            }
        });
    }

从我的代码中可以看出,我使用的是“RootWeb”,因此我忽略了站点内的任何子节点。但这不起作用。

任何帮助将不胜感激。

【问题讨论】:

    标签: sharepoint sharepoint-2010 navigation web-parts


    【解决方案1】:

    试试这个:

    使用 (SPSite oSiteCollection = new SPSite("http://")) { SPWeb web = oSiteCollection.OpenWeb("sites");

                foreach (SPWeb oWebsite in web.Webs)
                {
                    Console.WriteLine("Web site: {0}", oWebsite.Url);
                    oWebsite.Dispose();
                }
           }
    

    【讨论】:

    • 感谢您的回复。这似乎是一个更好的方法。我会试一试的。
    • 我试过了,但它不起作用。可能是因为我的网站正在使用带有托管路径的网站集。
    【解决方案2】:

    阅读您的评论后,@R100,如果您为子站点定义了托管路径,那么每个托管路径(无论您放置的逻辑层次结构如何)在 SPWebApplication.Sites 集合中都处于同一级别。

    例如,如果您有以下层次结构:

    • 根 (/) [网站集]
      • 网站 (/sites) [网站集]
      • IT (/sites/IT) [网站集]
      • 支持 (/sites/IT/Support) [网站集]

    然后 SPWebApplication.Sites 将在一个扁平集合中包含上述每个。

    此外,网站集的 ServerRelativeUrl 都与 SharePoint 安装的根目录相关。因此,您在上述层次结构的括号中看到的是每个节点的 ServerRelativeUrl。

    因此,您在迭代值时的检查对于 /sites/it 下的每个子网站集都是正确的(如果它是您传递的 siteName):

    site.ServerRelativeUrl.StartsWith(String.Format("/sites/{0}/", siteName))
    

    【讨论】:

      猜你喜欢
      • 2011-03-16
      • 1970-01-01
      • 2012-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多