如何遍历SharePoint Web的所有Web和子Web

时间:2016-03-29 14:37:22

标签: c# asp.net sharepoint sharepoint-2010 sharepoint-2013

我正试图在网络下遍历这些网的所有网和子网。

我的家长网

http://EXAMPLE.com/parentweb(这是一个子网站而不是根网站)

子网 http://example.com/parentweb/subweb(这是可能有或没有子网的子网之一)

我唯一尝试的是进入网站集并循环遍历所有网站,这是一个更长的过程,因为我知道唯一需要检查的子网站。我的网站集有多个子网站。我不想遍历所有子网站。

此代码有效,但需要花费大量时间,并且遍历所有不需要检查的子网站

     using(SPSite site = new SPSite(“http://myserver/mysitecol”) 
           { 
               foreach(SPWeb web in site.AllWebs) 
               {
               }
           } 

1 个答案:

答案 0 :(得分:2)

您可以使用.Webs对象的SPWeb属性来访问其直接子子网站。

using(SPSite site = new SPSite("http://myserver/mysitecol") 
{ 
    using(SPWeb parentweb = site.OpenWeb("subweb/subweb") 
    {
        foreach(SPWeb web in parentweb.Webs)
        {

        }
    }
} 

要访问Web下面的所有(包括间接)子孙网站,您可以在每个直接后代上递归访问该.Webs属性,但是从它开始可以更直接.AllWebs网站集对象的SPSite属性。

.WebsInfo返回的SPWebCollection的.AllWebs属性为您提供了List<>个轻量级SPWebInfo对象。您可以使用此轻量级集合来获取您关注的Web的筛选列表,而无需实例化和处理集合中的任何其他SPWeb。

string webUrl = "/mysitecol/subweb/subweb";
using(SPSite site = new SPSite("http://myserver/mysitecol") 
{ 
    List<SPWebInfo> websInfo = site.AllWebs.WebsInfo.FindAll(
        delegate(WebsInfo webInfo)
        {
            // filter to get us only the webs that start with our desired URL
            return webInfo.ServerRelativeUrl.StartsWith(webUrl);
        }
    );
    foreach(SPWebInfo webInfo in websInfo)
    {
         using(SPWeb web = site.OpenWeb(webInfo.Id))
         {

         }
    }
}