Share via


You can't delete a site that has subsites

源于一个朋友的需求:

WSS Site是可以定期做备份的,如果用户不小心删掉了什么东东,我们可以恢复这个站点,重新获得这个东东。但接下来,有一点麻烦:如果这个站点有子站点,那么要再删除这个恢复的临时站点时,会报错:

You can't delete a site that has subsites

一定要把所有的子站点,从最底层开始全部删除!

分析了一下,其实是这样的:如果这个WSS站点是一个顶级的站点,也就是我们一般看到的https://servername/sites/sitename或者https://servername的形式,那么,有子站点也没有问题,可以直接删除。

但如果这个站点本身就是一个子站点,例如https://servername/sites/sitename/subsitename或者https://servername/subsitename,那么如果这个子站点还有下一级的子站点,就会报这个错误,一定要把所有的子站点都删除掉。

解决方法很简单:写一个递归程序,从最下面的子站点开始,全部删光。

           private void button1_Click(object sender, System.EventArgs e)

           {

                 string sitename = textBox1.Text;

 

                 SPWeb myweb = new SPSite(sitename).OpenWeb();

 

                 deleteweb(myweb);

          

           }

 

           void deleteweb (SPWeb myweb)

           {

                 SPWebCollection subwebs = myweb.GetSubwebsForCurrentUser();

                 if (subwebs.Count > 0)

                 {

                      foreach(SPWeb subweb in subwebs)

                            deleteweb(subweb);

                 }

                 else

                 {

 

                      myweb.Delete();

                      return;

                 }

                 myweb.Delete();

 

           }

输入这个子站点的名字,然后就可以递归删除所有的子站点了。有一点:GetSubwebsForCurrentUser只能看到当前用户有权限的子站点,所以,用一个超级用户来运行吧。