2014-06-30 2 views
0

J'ai besoin de masquer le nœud actuel dans les menus personnalisés de la page maquette. J'utilise le contrôle SiteMapPath qui est déjà personnalisé. Je prends sitemap personnalisé à partir du fichier web.sitemap et tout est configuré correctement dans web.config.Comment masquer le nœud actuel dans asp: SiteMapPath?

Comment le faire?

+0

Désolé, mais ce n'est pas asp-classique. – Paul

+0

Correction d'un tag par @Paul – Greg

Répondre

0

Merci pour votre auto-réponse, cela m'a aidé à démarrer et ensuite Je l'ai modifié et je pense que ce code est un peu plus propre. Bien que je ne l'ai pas analysé en profondeur, je pense qu'il fonctionnera plus vite puisqu'il ne fonctionnera qu'une seule fois lorsque le noeud final (SiteMapNodeItemType.Current) est lié alors que votre code parcourt cette boucle chaque fois que l'événement est déclenché.

protected void Breadcrumb_ItemDataBound(object sender, SiteMapNodeItemEventArgs e) 
{ 
    // If this is the current node, hide it along with its 
    // separator (both have same ItemIndex) 
    if (e.Item.ItemType == SiteMapNodeItemType.Current) 
    { 
     foreach (SiteMapNodeItem node in (from SiteMapNodeItem x in ((SiteMapPath)sender).Controls 
             where x.ItemIndex == e.Item.ItemIndex 
             select x).ToList()) 
     node.Visible = false; 
    } 
} 
0

Un problème supplémentaire se produit lorsque j'ai découvert que lorsque je cache le dernier enfant, le séparateur reste visible.

J'ai trouvé une solution:

Je vais utiliser OnItemDataBound

définition: <asp:SiteMapPath OnItemDataBound="SiteMapNodeItemEventHandler" /> mise en œuvre: <asp:SiteMapPath ID="siteMapPath" runat="server" SiteMapProvider="CustomSiteMapProvider" OnItemDataBound="SiteMapPath_OnItemDataBound">

cs partie:

protected void SiteMapPath_OnItemDataBound(object sender, SiteMapNodeItemEventArgs e) 
    { 
     //Hiding current bread crumb node - it will be presented via ajax after page load. 
     SiteMapNodeItem nodeItem = e.Item; 
     SiteMapNode node = ((SiteMapPath)sender).Provider.CurrentNode; 

     // need to hide separator also, so I'm looking for current node index to compare to SiteMapNodeItem.ItemIndex 
     // same index will be for node and separator. 
     if ((node != null) && (node.ParentNode != null)) 
     { 
      int index = 0; 
      do 
      { 
       node = node.ParentNode; 
       index++; 
      } while (node.ParentNode != null); 

      if (nodeItem.ItemIndex == index) 
      { 
       nodeItem.Visible = false; 
      } 
     } 
    } 
Questions connexes