Pregunta

Tengo un Repetidor, que enumera todos los web.sitemap niño páginas en una ASP.NET página.Su DataSource es un SiteMapNodeCollection.Pero, yo no quiero que mi página de formulario de registro para mostrar allí.

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

El SiteMapNodeCollection.Remove() método lanza una

NotSupportedException:"La colección es de sólo lectura".

¿Cómo puedo eliminar el nodo de la colección antes de que el Enlace de datos, el Repetidor?

¿Fue útil?

Solución

Tu no necesitas CType

Dim children = _
    From n In SiteMap.CurrentNode.ChildNodes.Cast(Of SiteMapNode)() _
    Where n.Url <> "/Registration.aspx" _
    Select n

Otros consejos

El uso de Linq y .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 

Sin Linq, pero utilizando .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 )

Evitar la eliminación de los elementos de las colecciones, ya que es siempre lenta.A menos que usted va a ser un bucle a través de varias veces que es mejor filtrado.

Yo tengo que trabajar con el código de abajo:

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

Hay una manera mejor, donde no tengo que usar el CType()?

Además, esto pone a los niños a un System.Collections.Generic.IEnumerable(Of Object).Hay una buena manera de conseguir algo más inflexible como un System.Collections.Generic.IEnumerable(Of System.Web.SiteMapNode) o mejor aún, un System.Web.SiteMapNodeCollection?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top