Nascondere gli item nel controllo ASP.NET Menu
Il controllo asp:Menu non prevede un opzione per nascondere una voce di menu presente nel file web.sitemap.
E' possibile crearsi una gestione custom aggiungendo l'attributo visible="false" (o qualsiasi altra convenzione)
che va poi gestito tramite l'evento OnMenuItemDataBound del controllo asp:Menu
nell'evento, scatenato ad ogni item della site map, controllo se è presente l'attributo visible e se è impostato a false, se è così rimuovo il nodo:
E' possibile crearsi una gestione custom aggiungendo l'attributo visible="false" (o qualsiasi altra convenzione)
XML: web.sitemap
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">
<siteMapNode url="~/default.aspx" title="Home">
<siteMapNode title="Projects">
<siteMapNode url="~/Projects/NewProject.aspx" title="New" />
<siteMapNode url="~/Projects/Search.aspx" title="Search" />
<siteMapNode url="~/Projects/Project.aspx" title="Detail" visible="false" />
</siteMapNode>
</siteMapNode>
</siteMap>
XML
<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="False"
IncludeStyleBlock="False" Orientation="Horizontal"
DataSourceID="SiteMapDataSource1"
onmenuitemdatabound="NavigationMenu_MenuItemDataBound" >
</asp:Menu>
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" ShowStartingNode="false" />
<asp:SiteMapPath ID="SiteMapPath1" runat="server" CssClass="SiteMapPath" PathSeparator=" : ">
<CurrentNodeStyle CssClass="SiteMapCurrentNodeStyle" />
<NodeStyle CssClass="SiteMapNodeStyle" />
<PathSeparatorStyle CssClass="SiteMapPathSeparatorStyle" />
<RootNodeStyle CssClass="SiteMapRootNodeStyle" />
</asp:SiteMapPath>
C#
protected void NavigationMenu_MenuItemDataBound(object sender, MenuEventArgs e)
{
MenuItem mi = e.Item as MenuItem;
SiteMapNode node = mi.DataItem as SiteMapNode;
if (node["visible"] != null && node["visible"] == "false")
{
if (mi.Parent != null)
{
mi.Parent.ChildItems.Remove(mi);
}
}
}