J'ai la navigation définie dans web.sitemap et je veux désactiver par programme certains siteMapNode. Comment est-ce possible?Comment supprimer SiteMapNode d'ASP: MENU Contrôle défini dans web.sitemap
Par exemple, je vous que le nœud suivant: Et je veux désactiver nœud si elle a des rôles = « Admin »
roleManager est configuré comme <roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider" />
et Windows autorisation n'a pas de groupe « Admin ». C'est comme un virtuel.
J'ai essayé suivante:
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);
}
}
Je reçois: System.NotSupportedException: Collection est en lecture seule.
ensuite essayé comme
SiteMapNodeCollection modifiableCollection = new SiteMapNodeCollection(SiteMap.RootNode.ChildNodes);
foreach (SiteMapNode node in SiteMap.RootNode.ChildNodes)
{
if (node.Roles.Contains("Admin"))
{
modifiableCollection.Remove(node);
}
}
Mais après que je ne sais pas comment brancher cette nouvelle collection en navigation (objet Menu1)
a également essayé de traiter chaque noeud gestionnaire de lancer, comme
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;
}
Mais il lance cet objet RootNode doit être créé avant d'utiliser "nouvelle" instruction. Bien que j'ai utilisé le prochain guide: http://msdn.microsoft.com/en-us/library/ms178425.aspx
Des suggestions? http://forums.asp.net/t/894192.aspx ici j'ai trouvé intéressante discussion où je ne l'ai pas essayé l'option avec e.Item.Parent.ChildItems.Remove(e.Item)
Voici également exemple intéressant How can I remove nodes from a SiteMapNodeCollection?, mais mon datasource avoir le type SiteMapDataSource, pas Repeater.DataSource