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)
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>
che va poi gestito tramite l'evento OnMenuItemDataBound del controllo asp:Menu
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>
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:
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);
    }
  }
}
Potrebbe interessarti anche: