Asp.net 使菜单项在母版页上不可见
我的主页上有一个使用网站地图的菜单。我想根据用户禁用某些菜单项。在任何情况下,我都不想进入MS“角色”的兔子洞 我有以下网站。主人: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"
<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);
}
}