/ / Ocultar los nodos de SiteMap de ASP.NET en el control TreeView: asp.net, vista de árbol, mapa del sitio

Ocultar los nodos de SiteMap de ASP.NET en el control TreeView: asp.net, vista de árbol, mapa del sitio

Tengo un SiteMap con todos mis nodos. Estoy usando un control TreeView que está vinculado a SiteMap para la navegación. Ahora me gustaría ocultar ciertos nodos que no aparecen en el TreeView. ¿Es posible hacer esto?

Respuestas

6 para la respuesta № 1

Sí, definitivamente es posible. La forma en que lo hacemos es agregar un atributo "IsPhantom" personalizado a los nodos que no queremos que se muestren en el mapa del sitio (y en otros lugares también):

<siteMapNode url="~/Welcome.aspx" title="Welcome" description="" isPhantom="true" />

Luego, en el control del mapa del sitio, use el siguiente código para eliminar los nodos que tienen el atributo "IsPhantom":

protected void Page_Load(object sender, EventArgs e)
{
TreeView1.TreeNodeDataBound += new TreeNodeEventHandler(TreeView1_TreeNodeDataBound);
SiteMapSource.Provider = this.CurrentProvider;
}

protected void TreeView1_TreeNodeDataBound(object sender, TreeNodeEventArgs e)
{
SiteMapNode thisMapNode = (SiteMapNode)e.Node.DataItem;
TreeNode parentTreeNode = e.Node.Parent;

if (thisMapNode["isPhantom"] != null && thisMapNode["isPhantom"].ToLower().Equals(bool.TrueString.ToLower()) && parentTreeNode != null)
parentTreeNode.ChildNodes.Remove(e.Node);
}

0 para la respuesta № 2

¿Basados ​​en qué criterios? Si solo desea ocultar nodos individuales específicos, suscríbase al evento NodeDataBound de TreeView y establezca todo el elemento (nodo) en Visible = false.

Si necesita hacer esto de una mejor manera yproporcionar más flexibilidad, le aconsejo que implemente su propio SiteMapProvider. Luego, puede tener una propiedad ShowInNavigation para cada nodo del mapa del sitio, y podrá establecer eso al construir su mapa del sitio.