V prípade, že použijeme ako datasource obyčajný SiteMapDataSource a pre zobrazovanie Menu a v tomto menu zavesíme na MenuItemDataBound zavesíme nasledujúci eventhandler :
protected void subMenu_MenuItemDataBound(object sender, MenuEventArgs e)
{
System.Web.UI.WebControls.Menu menu = (System.Web.UI.WebControls.Menu)sender;
SiteMapNode mapNode = (SiteMapNode)e.Item.DataItem;
System.Web.UI.WebControls.MenuItem itemToRemove = menu.FindItem(mapNode.Title);
if (mapNode["type"] == "hidden")
{
System.Web.UI.WebControls.MenuItem parent = e.Item.Parent;
if (parent != null)
{
parent.ChildItems.Remove(e.Item);
}
}
}
Môžeme v sitemap súbore použiť pre menuitem, ktorý má predka (Parenta) nasledujúci atribút : type="hidden".
Prečo píšem predka? Pretože ak nezobrazíme root node, parent v našom kóde bude null. Tým pádom môžeme skryť len položky ktoré niesú v zobrazovanom roote.
No a možno sa pýtajú podaktorí, k čomu je toto celé dobré? Napr : máte masterpage a v ňom menu. Chcete, aby sa zobrazovalo na všetkých stránkach. Dáta v DB zobrazujete napr. spôsobom, ktorý najprv. zobrazí všetky položky a pre detail položky sa presmeruje na iný page, ktorý vytiahne k položke doplňujúce informácie. Ak chcete menu, musí byť aj táto podstránka v sitemap, no nechcete dovoliť užívateľom sa na ňu dostať z menu, teda má aj nemá byť v sitemap. Viem, je to schiza. 