2010-02-13 4 views
0

J'essaie d'accéder au nœud de niveau supérieur 'actif' en cours à partir d'un répéteur de sitemaps depuis l'extérieur du répéteur ASP.NET utilisé pour le rendre, ceci à des fins de style CSS. Je veux placer les nœuds enfants sur la ligne suivante avec un style différent horizontalement. Actuellement, j'ai le code suivant que je ne peux pas afficher correctement en utilisant CSS.Accès à SiteMapNode Container.DataItem depuis l'extérieur de Parent Repeater

<asp:SiteMapDataSource ID="topNavLevel" runat="server" ShowStartingNode="false" /> 
<asp:Repeater runat="server" ID="rptParent" DataSourceID="topNavLevel"> 
    <HeaderTemplate><ul id="lawMenu" class="topMenu"></HeaderTemplate> 
    <ItemTemplate> 
    <li> 
    <asp:HyperLink runat="server" ID="parentLink" NavigateUrl='<%# Eval("Url") %>'><span class="t"><%# Eval("Title") %></span><span class="l"></span><span class="r"></span></asp:HyperLink> 
    <asp:Repeater ID="rptChild" runat="server" DataSource='<%# ((SiteMapNode) Container.DataItem).ChildNodes %>'> 
    <HeaderTemplate> 
     <ul> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <li> 
     <asp:HyperLink ID="childLink" runat="server" NavigateUrl='<%# Eval("Url") %>'><span class="t"><%# Eval("Title") %></span><span class="l"></span><span class="r"></span></asp:HyperLink> 
     </li> 
    </ItemTemplate> 
    <FooterTemplate> 
     </ul> 
    </FooterTemplate> 
    </asp:Repeater> 
    </li> 
    </ItemTemplate> 
    <FooterTemplate> 
    </ul></FooterTemplate> 
</asp:Repeater> 

Je voudrais afficher les nœuds enfants sur l'élément suivant bleu clair que je peux faire très bien d'un div séparé si cela n'a pas été rendu à l'aide d'un répéteur enfant. Dans l'image ci-dessous Blog et Services sont des nœuds de niveau supérieur et leurs nœuds suivants (2 pour chaque) doivent être affichés sur la ligne bleu clair ci-dessous. Est-ce possible?

Merci.

image http://yfrog.com/13captureayp

Répondre

0

Pour obtenir les répéteurs parents DataItem comme si vous étiez pas à l'intérieur de votre répéteur enfant:

<%# DataBinder.Eval(((System.Web.UI.WebControls.RepeaterItem)Container.Parent.Parent).DataItem, "Property") %> 
+0

Salut Nick, pouvez-vous développer sur ce basé sur le scénario ci-dessus? J'ai besoin de lister les éléments enfants du répéteur de nœud (parent) actuel. Cela doit être sous la forme d'un élément div séparé avec du code pour créer le nouveau répéteur enfant à l'intérieur. Merci de votre aide. – user260012

0

J'ai résolu maintenant. Pour ceux qui viennent d'autre sur ce poste est ici la solution:

<asp:SiteMapDataSource ID="topNavLevel" runat="server" ShowStartingNode="false" /> 
      <asp:Repeater runat="server" ID="rptParent" DataSourceID="topNavLevel"> 
       <HeaderTemplate> 
        <ul id="lawmenu" class="law-menu"> 
       </HeaderTemplate> 
       <ItemTemplate> 
        <li> 
         <asp:HyperLink runat="server" ID="parentLink" NavigateUrl='<%# Eval("Url") %>'><%# Eval("Title") %></asp:HyperLink> 
        </li> 
       </ItemTemplate> 
       <FooterTemplate> 
        </ul> 
     </FooterTemplate> 
      </asp:Repeater> 
      </div> 
      <div class="law-nav_nav2"> 
      <asp:SiteMapDataSource ID="secondNavLevel" runat="server" ShowStartingNode="false" StartingNodeOffset="1" /> 
       <asp:Repeater ID="rptChild" runat="server" DataSourceID="secondNavLevel"> 
          <HeaderTemplate> 
           <ul class="law-menu_nav2"style="z-index:100"> 
          </HeaderTemplate> 
          <ItemTemplate> 
          <li> 
          <asp:HyperLink ID="childLink" runat="server" NavigateUrl='<%# Eval("Url") %>'><%# Eval("Title") %></asp:HyperLink> 
          </li> 
          </ItemTemplate> 
          <FooterTemplate> 
           </ul> 
          </FooterTemplate> 
         </asp:Repeater> 
      </div> 

HeaderTemplate prend soin de la liste style contenant alors les éléments de répéteur sont répertoriés sur un à la fois avec un décalage de 1 pour le noeud courant. Cela semble facile basé sur ce que j'ai vu autour du net, je suis juste assez nouveau à certains éléments d'ASP.NET :) Merci.

Questions connexes