我在我的应用程序中发现了一种奇怪的行为。
我有一个菜单,由siteMap填充。
<asp:SiteMapDataSource ID="siteMapDataSource" runat="server" SiteMapProvider="examGenSiteMap" />
<asp:Menu ID="mainMenu" runat="server" DataSourceID="siteMapDataSource" Orientation="Horizontal" StaticDisplayLevels="2" OnMenuItemDataBound="MenuExamGen_MenuItemDataBound">
// Some Item styles
</asp:Menu>
现在我添加了一个OnMenuItemDataBound,我检查了一下,如果siteMap中的角色与用户角色匹配。如果不是:删除该项,以便用户无法看到它。
if (!((SiteMapNode)e.Item.DataItem).Roles.Contains(Session["Role"].ToString()))
{
mainMenu.Items.Remove(e.Item);
}
我多次调试此代码,它工作正常。我要删除的所有项都由if标识,Remove()函数将这些项作为参数。
唯一的问题:在我的网页上仍然显示所有项目,我不明白为什么。
答案 0 :(得分:1)
好的,我已经解决了这个问题。 我不知道,为什么
mainMenu.Items.Remove(e.Item);
不再有效了。您需要删除根元素的子元素。
System.Web.UI.WebControls.Menu mainMenu = (System.Web.UI.WebControls.Menu)sender;
if (!((SiteMapNode)e.Item.DataItem).Roles.Contains(Session["Role"].ToString()))
{
mainMenu.Items[0].ChildItems.Remove(e.Item);
}
但感谢您试图帮助我:)