我想隱藏訪問者的「管理面板」菜單項,而不需要進入角色方法。ASP.net如何隱藏訪客的菜單項?
<?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>
母版頁
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);
}
}
}
}
標記
<asp:Menu ID="Menu1" runat="server" DataSourceID="SiteMapDataSource1"
Orientation="Horizontal" onmenuitemdatabound="Menu1_MenuItemDataBound">
</asp:Menu>
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server"
ShowStartingNode="False" />
我累了上面的代碼,但它無法正常工作。它看起來像「管理面板」的父項爲空。但我不知道如何修改它以使其工作。
我也試過一個簡單的版本:
Menu1.Items.RemoveAt(2);
不知道爲什麼它給了我索引超出邊界錯誤。管理面板項目實際上是Menu1中的第三項。
任何幫助,將不勝感激。
使用角色有什麼問題? –
@matti。我只需要區分2類用戶(登錄/不登錄),所以我認爲HttpContext.Current.User.Identity.IsAuthenticated是有效 –