/ / Ukrywanie węzłów SiteMap ASP.NET w kontrolce TreeView - asp.net, treeview, sitemap

Ukrywanie węzłów SiteMap ASP.NET w kontrolce TreeView - asp.net, treeview, sitemap

Mam mapę strony z wszystkimi moimi węzłami. Używam kontrolki TreeView, która jest powiązana z SiteMap w celu nawigacji.Jednak chciałabym ukryć pewne węzły przed pojawieniem się na TreeView. Czy jest to możliwe?

Odpowiedzi:

6 dla odpowiedzi № 1

Tak, jest to zdecydowanie możliwe. W ten sposób dodajemy niestandardowy atrybut "IsPhantom" do węzłów, których nie chcemy pokazywać w mapie witryny (oraz w różnych innych miejscach):

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

Następnie w formancie mapy witryny użyj następującego kodu, aby usunąć węzły z atrybutem "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 dla odpowiedzi nr 2

Na podstawie jakich kryteriów? Jeśli chcesz ukryć tylko pojedyncze węzły, zasubskrybuj zdarzenie NodeDataBound w TreeView i ustaw cały element (węzeł) na Visible = false.

Jeśli chcesz to zrobić w lepszy sposób izapewnić większą elastyczność, radziłbym, aby wdrożyć własny SiteMapProvider. Następnie możesz mieć właściwość ShowInNavigation dla każdego węzła mapy witryny i można ją ustawić podczas tworzenia mapy witryny.