كيف يمكنني إزالة العقد من SiteMapNodeCollection؟
سؤال
لقد حصلت على مكرر يسرد كافة 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()
طريقة يلقي أ
استثناء غير مدعوم:"المجموعة للقراءة فقط".
كيف يمكنني إزالة العقدة من المجموعة قبل DataBinding the Repeater؟
المحلول
لا ينبغي أن تحتاج إلى CType
Dim children = _
From n In SiteMap.CurrentNode.ChildNodes.Cast(Of SiteMapNode)() _
Where n.Url <> "/Registration.aspx" _
Select n
نصائح أخرى
باستخدام Linq و.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
بدون Linq، ولكن باستخدام .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 )
تجنب إزالة العناصر من المجموعات لأن ذلك يكون بطيئًا دائمًا.ما لم تكن ستقوم بالتكرار عدة مرات، فمن الأفضل أن تقوم بالتصفية.
حصلت عليه للعمل مع الكود أدناه:
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
?