I want to hide the “Admin Panel” menu item from visitor, without going into the Role approach.
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="" title="Nav" description="">
<siteMapNode url="~/Default.aspx" title="Home" description=""></siteMapNode>
<siteMapNode url="~/About.aspx" title="About" description=""></siteMapNode>
<siteMapNode url="" title="Admin Panel" description="">
<siteMapNode url="~/Admin/AddPosts.aspx" title="Add Posts" description=""></siteMapNode>
<siteMapNode url="~/Admin/EditPosts.aspx" title="Edit Posts" description=""></siteMapNode>
<siteMapNode url="~/Admin/ApproveComments.aspx" title="Approve Comments" description=""></siteMapNode>
</siteMapNode>
</siteMapNode>
</siteMap>
master page
protected void Menu1_MenuItemDataBound(object sender, MenuEventArgs e)
{
if (!HttpContext.Current.User.Identity.IsAuthenticated)
{
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.Title == "Admin Panel")
{
System.Web.UI.WebControls.MenuItem parent = e.Item.Parent;
if (parent != null)
{
parent.ChildItems.Remove(e.Item);
}
}
}
}
markup
<asp:Menu ID="Menu1" runat="server" DataSourceID="SiteMapDataSource1"
Orientation="Horizontal" onmenuitemdatabound="Menu1_MenuItemDataBound">
</asp:Menu>
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server"
ShowStartingNode="False" />
I tired the code above, but it is not working. It looks like, the parent for “Admin Panel” is null. But i don’t know how to modify it to make it work.
I also tried a simply version:
Menu1.Items.RemoveAt(2);
Not sure why it gave me index out of bound error. The Admin Panel item is really the 3rd item in Menu1 though.
Any help would be appreciated.
Could do this 2 ways:
MarkUp:
Code:
Markup:
Code: