2012-04-11 2 views
4

Я хотел бы удалить все ссылки в quicklaunch в SP2010 с C#. Я учил это делать, но почему-то они не собирающийся удалены:Удалить все ссылки из quicklaunch?

 SPNavigationNodeCollection n = subSite.Navigation.QuickLaunch; 

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

Im может добавлять ссылки, но не удалять их:/Любые идеи? Thx

Edit: Ах получил починку :)

Я не могу писать только node.Delete() Мне нужно написать n.Delete(node)

edit2: Hm как-то я не получаю удалил все ссылки. Если я запускаю код в 2-3 раз, то все они будут удалены, странно

+0

Что вы имеете в виду "не в состоянии удалить". Вызывается ли исключение? Вы получили сообщение об ошибке? Они просто остаются на своем месте? –

+0

Оставайтесь на месте ... – sabisabi

ответ

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

+1

Как-то ваш код лучше, потому что он действительно удаляет все ссылки. И мой foreach не хочет удалять их всех в первом раунде. Я не понимаю, почему? Его тот же код, что и для foreach, и я для него всегда лучше. – sabisabi

+0

для получения дополнительной информации проверьте URL: http://www.mtelligent.com/journal/2007/10/7/customizing-the-quick-launch-menu-with-spnavigationnode-spna.html –

1

вы должны обработать коллекцию из прошлого во-первых, потому что, если вы делаете это сначала, как в случае с foreach, вы меняете коллекцию при удалении элементов из нее, испортить итерацию

5

Я сам испытал эту проблему.

Мне удалось удалить ссылки на быстрый запуск, удалив снизу вверх. Моя теория заключается в том, что коллекция смещается после удаления ссылки при быстром запуске, поэтому, когда ссылка [0] удаляется, ссылка [1] становится ссылкой [0]. Затем при попытке удалить ссылку [1] ссылка [2] фактически удаляется.

Ваша проблема в том, что в какой-то момент ссылка [i] не существует, и ошибка «не может завершить это действие» бросается, но вы не удалили все ссылки.

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

for (i = numLinks-1; i >=0 ; i--) 
{ 
    links[i].Delete(); 
} 
1

это также должно работать

SPNavigationNodeCollection nodes = web.Navigation.QuickLaunch; 
while (nodes.Count > 0) 
{ 
    nodes[0].Delete(); 
} 
Смежные вопросы