У меня определена навигация в web.sitemap, и я хочу программно отключить некоторые siteMapNode.Как это возможно?
Например, у меня есть следующий узел: и я хочу отключить узел, если у него есть role = "Admin"
roleManager настроен как <roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider" />
, а авторизация Windows - нетесть группа "Админ".Это похоже на Виртуальный.
Я попробовал следующее:
SiteMapNodeCollection tempCollection = new SiteMapNodeCollection(SiteMap.RootNode.ChildNodes);
if (SiteMap.RootNode.ReadOnly)
SiteMap.RootNode.ReadOnly = false;
foreach (SiteMapNode node in tempCollection)
{
if (node.Roles.Contains("Admin"))
{
SiteMap.RootNode.ChildNodes.Remove(node);
}
}
Затем я получаю: System.NotSupportedException: Коллекция доступна только для чтения.
Затем попробовал как
SiteMapNodeCollection modifiableCollection = new SiteMapNodeCollection(SiteMap.RootNode.ChildNodes);
foreach (SiteMapNode node in SiteMap.RootNode.ChildNodes)
{
if (node.Roles.Contains("Admin"))
{
modifiableCollection.Remove(node);
}
}
Но после этого я не знаю, как подключить эту новую коллекцию к навигации (объект Menu1)
Также пытался обработать каждый обработчик броска узла, например
SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(this.SiteMapAccess);
private SiteMapNode SiteMapAccess(Object sender, SiteMapResolveEventArgs e)
{
SiteMapNode RootNode = SiteMap.RootNode.Clone(true);
SiteMapNode tempNode = RootNode;
if (tempNode.Roles.Contains("Admin"))
{
tempNode.RootNode.ChildNodes.Remove(tempNode);
}
return RootNode;
}
Но это бросает вызов тому, что объект RootNode должен быть создан перед использованием оператора "new".Хотя я использовал следующее руководство: http://msdn.microsoft.com/en-us/library/ms178425.aspx
Есть предложения?http://forums.asp.net/t/894192.aspx здесь я нашел интересное обсуждение, где я не пробовал вариант с e.Item.Parent.ChildItems.Remove(e.Item)
Вот также интересный пример Как я могу удалить узлы из SiteMapNodeCollection? , но мойисточник данных имеет тип SiteMapDataSource, а не Repeater.DataSource