【发布时间】:2019-02-18 17:10:02
【问题描述】:
我正在处理某人留下的代码。
这是一个 ASP.NET WebForm 应用程序。对于授权许多角色 已定义。
他在没有 MenuItems 的母版页上定义了 Menu 基础结构。
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />
<asp:Menu ID="Menu1" CssClass="noflicker" runat="server"
Orientation="Horizontal" StaticDisplayLevels="2" OnMenuItemClick="Menu1_MenuItemClick" DataSourceID="SiteMapDataSource1">
<StaticMenuStyle BorderStyle="None" />
<StaticSelectedStyle BackColor="#1e1a53" ForeColor="white" Height="25px" Font-Size="18px" Font-Names="Arial" />
<StaticMenuItemStyle HorizontalPadding="14px" BorderStyle="None" BorderWidth="1px" Font-Size="18px" ForeColor="White" Height="25px" Font-Bold="False" Font-Names="Arial" />
<StaticHoverStyle Height="25px" Font-Names="Arial" ForeColor="white" BackColor="#F99D1C" BorderColor="#3366CC" />
<DynamicHoverStyle Height="35px" Font-Names="Arial" ForeColor="white" BackColor="#F99D1C" Font-Size="18px" />
<DynamicMenuStyle BorderStyle="Solid" BorderColor="#1e1a53" BorderWidth="1px" Height="25px"
Font-Names="Arial" ForeColor="White" BackColor="#1e1a53" VerticalPadding="3px" />
<DynamicSelectedStyle Height="35px" Font-Names="Arial" BorderColor="#1e1a53" BorderWidth="1px" ForeColor="White" BackColor="#1e1a53" />
<DynamicMenuItemStyle BorderStyle="Solid" BorderWidth="1px" BorderColor="#1e1a53" Height="35px"
ForeColor="White" BackColor="#1e1a53" HorizontalPadding="3px" Font-Bold="False" Font-Size="18px"
Font-Names="Arial" CssClass="leftMenuItem" VerticalPadding="5px" ItemSpacing="3px" />
<DataBindings>
<asp:MenuItemBinding DataMember="SiteMapNode" TextField="Title" ToolTipField="description" />
</DataBindings>
</asp:Menu>
菜单在运行时使用站点地图填充:
SiteMapDataSource1.SiteMapProvider = "allMenuItemsSiteMap";
我知道如果 Menu 是使用 Menuitems 定义的,那么删除它们很容易。
但是,使用站点地图有没有办法删除菜单上的项目?
目前,我知道的唯一方法是为不同的角色定义不同的站点地图,这绝对不是一个好的解决方案,
【问题讨论】:
-
填充后,您可以遍历菜单(匹配菜单文本?)并删除项目 - 仍然不是最佳解决方案
-
@Kevin,我认为这比定义不同的站点地图要好。
-
@kevin , SiteMapDataSource1.SiteMapProvider = "allMenuItemsSiteMap";似乎本身并没有填充菜单,项目数返回为 0
-
试试 Menu1.Items