कैसे मैं एक SiteMapNodeCollection से नोड्स निकाल सकते हैं?

वोट
1

मैं एक पुनरावर्तक है कि सभी सूचीबद्ध करता है मिल गया है web.sitemapएक ASP.NET पृष्ठ पर बच्चे पृष्ठों की है। इसका DataSourceएक है SiteMapNodeCollection। लेकिन, मैं अपने पंजीकरण फार्म पेज वहां प्रदर्शित नहीं करना चाहते।

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()विधि फेंकता है एक

NotSupportedException: संग्रह केवल पढ़ने के लिए।

मैं कैसे पुनरावर्तक डेटा बाइंडिंग से पहले संग्रह से नोड निकाल सकते हैं?

15/08/2008 को 13:38
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
1

Linq और नेट 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 

Linq, लेकिन नेट 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 )

संग्रह से आइटम निकाल हमेशा धीमी है कि के रूप में करने से बचें। जब तक आप एक से अधिक बार के माध्यम से पाशन करने जा रहे हैं आप को छानने से बेहतर कर रहे हैं।

15/08/2008 को 13:44
का स्रोत उपयोगकर्ता

वोट
0

मैं इसे नीचे दिए गए कोड के साथ काम मिल गया:

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

वहाँ एक बेहतर तरीका है जहाँ मैं उपयोग करने के लिए नहीं है CType()?

इसके अलावा, यह एक करने के लिए बच्चों को सेट System.Collections.Generic.IEnumerable(Of Object)। वहाँ एक अच्छा तरीका वापस और अधिक दृढ़ता से एक की तरह टाइप किया कुछ पाने के लिए है System.Collections.Generic.IEnumerable(Of System.Web.SiteMapNode)या और भी बेहतर एक System.Web.SiteMapNodeCollection?

15/08/2008 को 14:25
का स्रोत उपयोगकर्ता

वोट
1

आपका CTYPE आवश्यकता नहीं होनी चाहिए

Dim children = _
    From n In SiteMap.CurrentNode.ChildNodes.Cast(Of SiteMapNode)() _
    Where n.Url <> "/Registration.aspx" _
    Select n
15/08/2008 को 14:28
का स्रोत उपयोगकर्ता

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