2011-02-17 5 views
1

특정 수준의 모든 사이트를 반복하는 방법은 무엇입니까? 현재로서는 다음 위치에 사이트가 있습니다 : http://myintranet.com/sites.SharePoint 2010의 특정 수준에있는 사이트를 반복합니다.

그 수준 아래에 다른 하위 사이트가 있기 때문에/site에서 내 사이트를 출력하고 싶습니다.

어떻게하면됩니까? 순간

, 내 코드는 다음과 같습니다 : 나는 "CreateNavigationHtml"방법 내 모든 반복을하고있는 중이 야

private void GetNavigation() 
    { 
     SPSecurity.RunWithElevatedPrivileges(delegate() 
     { 
      using (SPWeb intranetSite = new SPSite(SPContext.Current.Web.Url + "/sites/").OpenWeb()) 
      { 
       SPWebCollection subSites = intranetSite.Webs; 

       NavigationOutputHtml.Text = CreateNavigationHtml(subSites); 
      } 

     }); 
    } 

. 하지만 SPWebCollection에서 올바른 메서드를 내 메서드로 전달할 수 없습니다.

도움 주셔서 감사합니다.

답변

2

/sites은 (는) Managed Path입니다. SharePoint에서 IIS 웹 사이트는 웹 응용 프로그램입니다. 관리 경로를 사용하면 SharePoint에서 단일 IIS 웹 사이트 내에 여러 사이트 모음을 가질 수 있습니다. 그런 다음 SharePoint 사이트는 사이트 모음 내에 번들로 제공됩니다.

그래서 웹 응용 프로그램의 /sites 관리 경로 내의 모든 사이트 모음 내의 모든 사이트를 얻으려면, 당신은 다음과 같은 코드가 필요합니다

foreach (SPSite site in SPContext.Current.Site.WebApplication.Sites) 
{ 
    try 
    { 
     if (SPSite.Exists(new Uri(site.Url)) && site.ServerRelativeUrl.StartsWith("/sites/")) 
     { 
      SPWebCollection subSites = site.AllWebs; 
      NavigationOutputHtml.Text = CreateNavigationHtml(subSites); 
     } 
    } 
    finally 
    { 
     site.Dispose(); 
    } 
} 
+0

정말 귀하의 회신을 주셔서 감사합니다. 나는 이것을 내일 보내 줄 것이다. 이것은 하루 종일 나를 괴롭 히고있다. :-) 사이트 콜렉션이 될 것이라고 생각하지 마십시오. – R100

+0

안녕하세요. 해당 코드를 추가로 수정하여 사이트의 하위 사이트를 가져 오지 못하게하려면 어떻게해야합니까? 예를 들어/sites/IT는 그 이상으로 진행해서는 안됩니다./site/IT/othersite를 통해 반복하고 싶지 않습니다. 추가 도움을 주셔서 감사합니다. – R100

+0

AllWebs 대신 RootWeb을 사용하십시오. http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsite.rootweb.aspx –

관련 문제