ASP.net如何隐藏来自顾客的菜单项? [英] ASP.net How to hide a menu item from visitor?

查看:155
本文介绍了ASP.net如何隐藏来自顾客的菜单项?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想隐藏从顾客的管理面板菜单项,无需进入角色的方法。

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>

母版页

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" />

我累了上面的code,但它不工作。它看起来像,对于管理面板父为null。但我不知道如何修改它,使其工作。

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);

不知道为什么它给了我索引超出边界错误。管理面板产品真的菜单1第3项虽然。

Not sure why it gave me index out of bound error. The Admin Panel item is really the 3rd item in Menu1 though.

任何帮助将是AP preciated。

Any help would be appreciated.

推荐答案

可以这样做2种方式:

标记:

<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" />

code:

protected void NavigationMenu_MenuItemDataBound(object sender, MenuEventArgs e)
{
    System.Web.UI.WebControls.Menu menu = (System.Web.UI.WebControls.Menu)sender;
    SiteMapNode mapNode = (SiteMapNode)e.Item.DataItem;

    if (mapNode.Title == "Admin Panel")
    {            
        System.Web.UI.WebControls.MenuItem itemToRemove = menu.FindItem(mapNode.Title);
        menu.Items.Remove(itemToRemove);
    }
}


标记:

<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" 
                EnableViewState="False" IncludeStyleBlock="False" Orientation="Horizontal" 
                DataSourceID="SiteMapDataSource1" ondatabound="NavigationMenu_DataBound" >
</asp:Menu>
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" ShowStartingNode="false" />

code:

protected void NavigationMenu_DataBound(object sender, EventArgs e)
{
    ((System.Web.UI.WebControls.Menu)sender).Items.RemoveAt(2);
}

这篇关于ASP.net如何隐藏来自顾客的菜单项?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆