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只能看到当前用户有权限的子站点,所以,用一个超级用户来运行吧。