2014-11-05 3 views
1

В моей работе я обнаружил странное поведение.ASP.NET Удалить элемент из 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, в котором я проверяю, если роли в матчах с Карта сайта роли пользователя. Если нет: удалите этот элемент, чтобы пользователь не мог его видеть.

 if (!((SiteMapNode)e.Item.DataItem).Roles.Contains(Session["Role"].ToString())) 
     { 
      mainMenu.Items.Remove(e.Item); 
     } 

Я отлаживал этот код несколько раз, он отлично работает. Все элементы, которые я хочу удалить, идентифицируются с помощью функции if и Remove(), которая получает эти элементы в качестве аргумента.

Единственная проблема: на моей веб-странице все элементы ar все еще показаны, и я понятия не имею, почему.

+1

что эта переменная MainMenu? – Vasanthan

+1

Посмотрите на эту ссылку http://stackoverflow.com/questions/6540822/asp-net-how-to-hide-a-menu-item-from-visitor – Vasanthan

+1

mainMenu variale - это мое меню: P – capekall

ответ

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

Но благодаря за то, чтобы помочь мне :)

Смежные вопросы