4

我想用 C# 删除 SP2010 中快速启动中的所有链接。我认为这会做到,但不知何故他们不会被删除:

        SPNavigationNodeCollection n = subSite.Navigation.QuickLaunch;

        foreach (SPNavigationNode node in n)
        {
            node.Delete();
        }

我可以添加链接,但不能删除它们:/有什么想法吗?谢谢

编辑:啊得到了修复:)

我不能写只是node.Delete()我需要写n.Delete(node)

Edit2:嗯,不知何故,我没有删除所有链接。如果我运行代码 2-3 次,那么它们都会被删除,很奇怪

4

4 回答 4

12

试试这个代码:

 SPNavigationNodeCollection nodes = web.Navigation.QuickLaunch;
 for(int i = nodes.Count - 1; i >= 0; i--)
            {
                nodes[i].Delete();
            }

另见此链接:http ://www.mtelligent.com/journal/2007/10/7/customizing-the-quick-launch-menu-with-spnavigationnode-spna.html

于 2012-04-11T13:39:26.043 回答
5

我自己也遇到过同样的问题。

我可以通过从下往上删除快速启动时的链接。我的理论是,在快速启动时删除链接后集合会向上移动,因此当链接 [0] 被删除时,链接 [1] 变为链接 [0]。然后当试图删除链接 [1] 时,链接 [2] 实际上被删除了。

您的问题是,在某些时候 link[i] 不存在并抛出错误“无法完成此操作”,但您尚未删除所有链接。

//Iterate from the bottom of the links to the top

for (i = numLinks-1; i >=0 ; i--)
{
    links[i].Delete();
}
于 2012-10-23T14:00:11.090 回答
1

您必须从最后一个到第一个处理集合,因为如果您像使用 foreach 一样从头到尾进行处理,则在从中删除项目时会更改集合,从而弄乱了迭代

于 2012-04-17T18:23:38.543 回答
1

这也应该有效

 SPNavigationNodeCollection nodes = web.Navigation.QuickLaunch;
 while (nodes.Count > 0)
 {
    nodes[0].Delete();
 }
于 2013-07-24T14:55:43.253 回答