Nasıl bir SiteMapNodeCollection düğümler kaldırabilirim?

oy
1

Bütün listeleyen bir Tekrarlayıcı var web.sitemapbir ASP.NET sayfasında alt sayfaları. Onun DataSourcebir olduğunu SiteMapNodeCollection. Ama, benim kayıt formu sayfası var gösterilmesini istemiyorum.

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

SiteMapNodeCollection.Remove()Yöntem, atar

NotSupportedException: Koleksiyon salt okunur.

Nasıl Tekrarlayıcı veri bağlama önce koleksiyonundan düğümü kaldırabilirim?

Oluştur 15/08/2008 saat 13:38
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
1

Linq ve .NET 3.5 kullanarak:

//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 

Linq, ancak .NET 2'yi kullanarak olmadan:

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 )

Bu her zaman böyledir olarak koleksiyonlarından öğeleri kaldırarak kaçının. Eğer birden çok kez döngü olarak gidiyoruz sürece filtreleme daha iyi.

Cevap 15/08/2008 saat 13:44
kaynak kullanıcı

oy
0

Aşağıda kodu ile çalışmak için aldım:

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

Ben kullanmak zorunda değilsiniz daha iyi bir yolu var mı CType()?

Ayrıca, bu çocukların ayarlar System.Collections.Generic.IEnumerable(Of Object). Daha kesinlikle yazılı bir gibi bir şey geri almak için iyi bir yolu var mı System.Collections.Generic.IEnumerable(Of System.Web.SiteMapNode)veya daha iyi bir System.Web.SiteMapNodeCollection?

Cevap 15/08/2008 saat 14:25
kaynak kullanıcı

oy
1

Sizin CType gerekmez

Dim children = _
    From n In SiteMap.CurrentNode.ChildNodes.Cast(Of SiteMapNode)() _
    Where n.Url <> "/Registration.aspx" _
    Select n
Cevap 15/08/2008 saat 14:28
kaynak kullanıcı

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