从siteMap中删除ASP.NET项不起作用

时间:2014-11-05 10:07:52

标签: c# asp.net menu sitemap

我在我的应用程序中发现了一种奇怪的行为。

我有一个菜单,由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()函数将这些项作为参数。

唯一的问题:在我的网页上仍然显示所有项目,我不明白为什么。

1 个答案:

答案 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);
}

但感谢您试图帮助我:)