Wie kann ich Knoten aus einem SiteMapNodeCollection entfernen?

stimmen
1

Ich habe einen Repeater bekommt , die alle Listen untergeordnete web.sitemapSeiten auf einer ASP.NET - Seite. Sein DataSourceein SiteMapNodeCollection. Aber ich will nicht meine Anmeldeformular Seite dort zu zeigen.

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

Das SiteMapNodeCollection.Remove()Verfahren wirft ein

NotSupportedException: „Collection ist schreibgeschützt“.

Wie kann ich den Knoten aus der Sammlung entfernen, bevor Sie die Repeater-Datenbindung?

Veröffentlicht am 15/08/2008 um 13:38
quelle vom benutzer
In anderen Sprachen...                            


3 antworten

stimmen
1

Mit Linq und .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 

Ohne Linq, aber unter Verwendung von .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 )

Vermeiden Sie Elemente aus einer Sammlung entfernen, wie das ist immer langsam. Es sei denn, Sie gehen durch mehrere Male zu Looping sind Sie besser dran Filterung.

Beantwortet am 15/08/2008 um 13:44
quelle vom benutzer

stimmen
0

Ich habe es unten mit Code zu arbeiten:

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

Gibt es eine bessere Art und Weise , wo ich muss das nicht verwenden CType()?

Auch dies stellt Kinder ein System.Collections.Generic.IEnumerable(Of Object). Gibt es eine gute Möglichkeit , etwas stärker wie ein getippt , um wieder System.Collections.Generic.IEnumerable(Of System.Web.SiteMapNode)oder noch besser ein System.Web.SiteMapNodeCollection?

Beantwortet am 15/08/2008 um 14:25
quelle vom benutzer

stimmen
1

Sie soll nicht CType braucht

Dim children = _
    From n In SiteMap.CurrentNode.ChildNodes.Cast(Of SiteMapNode)() _
    Where n.Url <> "/Registration.aspx" _
    Select n
Beantwortet am 15/08/2008 um 14:28
quelle vom benutzer

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