Asp.net 使菜单项在母版页上不可见

Asp.net 使菜单项在母版页上不可见,asp.net,menu,master-pages,sitemap,Asp.net,Menu,Master Pages,Sitemap,我的主页上有一个使用网站地图的菜单。我想根据用户禁用某些菜单项。在任何情况下,我都不想进入MS“角色”的兔子洞 我有以下网站。主人: <div class="clear hideSkiplink"> <asp:Menu ID="MainMenu" runat="server" DataSourceID="SiteMapDataSource1" Orientation="Horizontal"

我的主页上有一个使用网站地图的菜单。我想根据用户禁用某些菜单项。在任何情况下,我都不想进入MS“角色”的兔子洞

我有以下网站。主人:

        <div class="clear hideSkiplink">
            <asp:Menu ID="MainMenu" runat="server" DataSourceID="SiteMapDataSource1" 
              Orientation="Horizontal"
              CssClass="menu"
              StaticDisplayLevels="1"
              StaticMenuItemStyle-VerticalPadding="2"
              StaticMenuItemStyle-HorizontalPadding="10"
              StaticMenuItemStyle-Font-Name="Verdana"
              StaticMenuItemStyle-Font-Size="12pt"
              StaticHoverStyle-BackColor="#707070"
              StaticHoverStyle-ForeColor="#550000"

              DynamicMenuStyle-HorizontalPadding="2"
              DynamicMenuStyle-VerticalPadding="2"
              DynamicMenuStyle-BackColor="#E0E0E0"
              DynamicMenuStyle-ForeColor="#FFFFFF"
              DynamicMenuStyle-BorderWidth="1"
              DynamicMenuStyle-BorderColor="#C0C0C0"
              DynamicMenuItemStyle-VerticalPadding="2"
              DynamicMenuItemStyle-Font-Name="Verdana"
              DynamicMenuItemStyle-Font-Size="9pt"
              DynamicMenuItemStyle-ForeColor="#FFFFFF"
              DynamicHoverStyle-BackColor="#707070"
              DynamicHoverStyle-ForeColor="#550000" />               


            <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server"  ShowStartingNode="False" />
当我把它放在主菜单下时,它没有效果。 当我把它放在Page_Load()下时,它会打印零,即使我可以看到正确显示的菜单,并且它确实有项目

事实: 菜单存在。 菜单上有很多项目。 菜单和项目显示正确

我想进入,例如,使标题为“Admin”的项目不可见(以及它的子菜单项)-我想删除它,但使其不可见或禁用都可以。我试过各种涉及MainMenu.FindItem的咒语。。。哪种方法似乎与查找项目没有任何关系。这时我注意到它找不到任何项目的原因是因为项目计数为零(即使我可以看到项目)

解决方案如下所示,但也需要添加

OnMenuItemDataBound="MainMenu_MenuItemDataBound"

到主菜单标签。

菜单将不会绑定到页面加载中的数据。这就是为什么它没有计数

在绑定MenuItemDataBound时检查MenuItemDataBound中的项可以这样做:

protected void MainMenu_MenuItemDataBound(Object sender, MenuEventArgs e)
{

    if (e.Item.Text == "Admin")
    {
        // disable the item
        //e.Item.Enabled = false;

        // remove the menu item
        MainMenu.Items.Remove(e.Item);

    }
}

不起作用。据我所知,main menu MenuItemDataBound从未被调用。啊!秘密在于我需要将OnMenuItemDataBound=“MainMenu\u MenuItemDataBound”添加到MainMenu的标记中。因此,您的解决方案确实有效。
OnMenuItemDataBound="MainMenu_MenuItemDataBound"
protected void MainMenu_MenuItemDataBound(Object sender, MenuEventArgs e)
{

    if (e.Item.Text == "Admin")
    {
        // disable the item
        //e.Item.Enabled = false;

        // remove the menu item
        MainMenu.Items.Remove(e.Item);

    }
}