2012-04-18 101 views
0

我有一个菜单,使用了我的母版页中的网站地图。我想根据用户禁用某些菜单项。在任何情况下,我都不想去掉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我尝试添加下两个以下代码的Page_Load下MainMenu_MenuItemDataBound:

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

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

Facts: 菜单存在。 菜单中有项目。 菜单和项目正确显示。

我想进去,例如,使标题“管理员”的项目不可见(以及它的子菜单项) - 我想删除它,但要么使其不可见或禁用它会没事的。我尝试过涉及MainMenu.FindItem的各种咒语......哪种方法似乎与查找物品没有任何关系。这是当我发现它没有找到任何物品的原因是因为物品数量为零(即使我可以看到物品)。

解决方案按以下戴夫·d,但还需要

OnMenuItemDataBound="MainMenu_MenuItemDataBound" 

添加到MainMenu的标签。

回答

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

    } 
} 
+0

没有工作。就我所知,MainMenu_MenuItemDataBound从不被调用。 – elbillaf 2012-04-18 16:59:20

+0

啊!秘密是我需要添加 OnMenuItemDataBound =“MainMenu_MenuItemDataBound” 到MainMenu的标签。所以你的解决方案确实可行 – elbillaf 2012-04-18 17:05:45