Comment puis-je supprimer des nœuds d'un SiteMapNodeCollection?

voix
1

J'ai un répéteur qui répertorie toutes les web.sitemappages de l' enfant sur une page ASP.NET. Son DataSourceest un SiteMapNodeCollection. Mais, je ne veux pas que ma page formulaire d'inscription pour montrer là - bas.

Dim Children As SiteMapNodeCollection = SiteMap.CurrentNode.ChildNodes

'remove registration page from collection
For Each n As SiteMapNode In SiteMap.CurrentNode.ChildNodes
If n.Url = /Registration.aspx Then
    Children.Remove(n)
End If
Next

RepeaterSubordinatePages.DataSource = Children

La SiteMapNodeCollection.Remove()méthode lance une

NotSupportedException: « Collection est en lecture seule ».

Comment puis-je supprimer le nœud de la collection avant Databinding le répéteur?

Créé 15/08/2008 à 13:38
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
1

LINQ et .Net 3.5:

//this will now be an enumeration, rather than a read only collection
Dim children = SiteMap.CurrentNode.ChildNodes.Where( _
    Function (x) x.Url <> "/Registration.aspx" )

RepeaterSubordinatePages.DataSource = children 

Sans Linq, mais en utilisant .Net 2:

Function IsShown( n as SiteMapNode ) as Boolean
    Return n.Url <> "/Registration.aspx"
End Function

...

//get a generic list
Dim children as List(Of SiteMapNode) = _
    New List(Of SiteMapNode) ( SiteMap.CurrentNode.ChildNodes )

//use the generic list's FindAll method
RepeaterSubordinatePages.DataSource = children.FindAll( IsShown )

Évitez de retirer les articles de collections comme c'est toujours lent. À moins que vous allez être en boucle par plusieurs fois, vous êtes mieux le filtrage.

Créé 15/08/2008 à 13:44
source utilisateur

voix
0

Je l'ai appris à travailler avec le code ci-dessous:

Dim children = From n In SiteMap.CurrentNode.ChildNodes _
               Where CType(n, SiteMapNode).Url <> "/Registration.aspx" _
               Select n
RepeaterSubordinatePages.DataSource = children

Y at - il une meilleure façon où je ne dois pas utiliser le CType()?

, Cela fixe également les enfants à un System.Collections.Generic.IEnumerable(Of Object). Y at - il un bon moyen de récupérer quelque chose de plus fortement typé comme un System.Collections.Generic.IEnumerable(Of System.Web.SiteMapNode)ou mieux encore un System.Web.SiteMapNodeCollection?

Créé 15/08/2008 à 14:25
source utilisateur

voix
1

Votre ne devrait pas avoir besoin CType

Dim children = _
    From n In SiteMap.CurrentNode.ChildNodes.Cast(Of SiteMapNode)() _
    Where n.Url <> "/Registration.aspx" _
    Select n
Créé 15/08/2008 à 14:28
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more