/ / Ocultando nós do Sitemap do ASP.NET no controle TreeView - asp.net, treeview, sitemap

Ocultando nós do Sitemap do ASP.NET no controle TreeView - asp.net, treeview, sitemap

Eu tenho um SiteMap com todos os meus nós. Eu estou usando um controle TreeView que está vinculado ao SiteMap para navegação. Agora eu gostaria de esconder certos nós de aparecer no TreeView. É possível fazer isso?

Respostas:

6 para resposta № 1

Sim, definitivamente é possível. A maneira como fazemos isso é adicionar um atributo "IsPhantom" personalizado aos nós que não queremos mostrar no sitemap (e em vários outros lugares também):

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

Em seguida, no controle sitemap, use o seguinte código para remover os nós que possuem o 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 resposta № 2

Com base em que critérios? Se você quiser apenas ocultar nós únicos específicos, inscreva-se no evento NodeDataBound do TreeView e defina o item inteiro (nó) como Visible = false.

Se você precisa fazer isso de uma maneira melhor efornecer mais flexibilidade, eu aconselho que você implemente seu próprio SiteMapProvider. Então você pode ter uma propriedade ShowInNavigation para cada nó do sitemap, e seria capaz de definir isso ao construir o seu sitemap.