使母版页上的菜单项不可见

时间:2012-04-18 15:47:57

标签: asp.net menu master-pages sitemap

我有一个使用我的母版页中的站点地图的菜单。我想根据用户禁用某些菜单项。在任何情况下,我都不想走下MS"角色"的兔子洞。

我有以下Site.Master:

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

我的web.sitemap类似于以下内容:

<siteMapNode >
    <siteMapNode url="default.aspx" title="Home"  description="" />

    <siteMapNode url="default.aspx?p=0" title="Admin" description="">
        <siteMapNode url="default.aspx?p=55" title="thing1"  description="" />
        <siteMapNode url="default.aspx?p=56" title="thing2"  description="" />
    </siteMapNode>

    <siteMapNode url="default.aspx?p=1" title="Thing3"   description="">
    </siteMapNode>
    <siteMapNode url="default.aspx?p=2" title="Thing4"  description="">
    </siteMapNode>
</siteMapNode>

在Site.Master.cs中,我尝试在Main_Lenu_MenuItemDataBound下的Page_Load AND下添加以下代码:

Response.Write(MainMenu.Items.Count.ToString());

当我把它放在MainMenu_MenuItemDataBound下时,它没有任何效果。 当我把它放在Page_Load()下面时,它打印为零,即使我可以看到正确显示的菜单,它也有项目!

事实: 菜单存在。 菜单有项目。 菜单和项目可以正常显示。

我想进去,例如,使用Title&#34; Admin&#34;隐形(以及它的子菜单项) - 我想删除它,但要么使它不可见或禁用它就没关系。我尝试过涉及MainMenu.FindItem的各种咒语......哪种方法似乎与查找项目无关。这是我注意到它找不到任何物品的原因是因为物品数量为零(即使我能看到物品)。

按照下面的Dave D解决方案,但也需要添加

OnMenuItemDataBound="MainMenu_MenuItemDataBound"

到MainMenu标签。

1 个答案:

答案 0 :(得分:1)

菜单不会绑定到page_load中的数据。这就是为什么它没有计数。

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

    }
}