2010-02-10 3 views
1

Je veux créer un menu à trois niveaux, j'ai une fonction récursive aujourd'hui qui fonctionne avec trois niveaux. Mais la chose est comment puis-je sortir le troisième levier? En utilisant deux répéteurs, j'ai réussi à obtenir les deux premiers niveaux grâce à la propriété ChildNodes. Mais cela ne me donne que le deuxième niveau. Que faire si un veulent le troisième niveau? Exemple de code ci-dessous. Comment puis-je obtenir le troisième niveau? :)Création d'un menu ASP.NET à trois niveaux avec SiteMap, comment le faire?

<asp:Repeater ID="FirstLevel" DataSourceID="SiteMapDataSource" runat="server" EnableViewState="false"> 
       <ItemTemplate> 
        <li class="top"> 
         <a href='/About/<%#Eval("Title")%>.aspx' class="top_link"><span class="down"><%#Eval("Title")%></span><!--[if gte IE 7]><!--></a><!--<![endif]--> 
         <asp:Repeater runat="server" ID="SecondLevel" DataSource='<%#((SiteMapNode)Container.DataItem).ChildNodes%>'> 
          <HeaderTemplate><!--[if lte IE 6]><table><tr><td><![endif]--><ul class="sub"></HeaderTemplate> 
          <ItemTemplate> 
           <li> 
            <a href='<%#((string)Eval("Url")).Replace("~", "")%>' style="text-align: left;"><%#Eval("Title")%></a> 

            Third repeater here? 

           </li> 
          </ItemTemplate> 
          <FooterTemplate></ul><!--[if lte IE 6]></td></tr></table></a><![endif]--></FooterTemplate> 
         </asp:Repeater> 
        </li> 
       </ItemTemplate> 
      </asp:Repeater> 

Répondre

1

Je voudrais utiliser le OnItemCreatedEvent du répéteur pour enregistrer l'événement OnItemDataBound de chaque répéteur et lié les données en conséquence. Est-ce que le contrôle de menu asp: n'est pas approprié? Pourquoi les répéteurs?

1

Je créer un contrôle serveur personnalisé et analyser le sitemap récursivement. Cela vous donnera plus de contrôle sur le rendu et vous permettra de spécifier des attributs personnalisés supplémentaires pour les nœuds de sitemap.

+0

Ceci est déjà fait, j'ai une classe SiteMapProvider qui hérite de StaticSiteMapProvider et construit le sitemap récursivement. Mais le problème est comment puis-je le rendre avec trois niveaux? Le contrôle Menu ne crée-t-il pas de mauvaises tables et autres? Je pense que c'est pourquoi il a été déversé la première fois :) – jinxen

+0

Je proposais de créer un contrôle de serveur personnalisé, pas un fournisseur de sitemap. Pour un sitemap simple, le contrôle du menu ASP.NET fonctionnera correctement. Utilisez les adaptateurs CSS Friendly pour rendre le menu sous forme de liste, http://cssfriendly.codeplex.com. –

Questions connexes