Доступ к SiteMapNode Container.DataItem извне родительского повторителя

Я пытаюсь получить доступ к текущему «активному» узлу верхнего уровня из повторителя карты сайта извне повторителя ASP.NET, используемого для его рендеринга, это для целей стилизации CSS, поскольку я хочу разместить дочерние узлы в следующей строке с разными укладка по горизонтали. В настоящее время у меня есть следующий код, который я не могу правильно отобразить с помощью CSS.

<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>

Я хотел бы отобразить дочерние узлы на следующем голубом элементе, который я могу отлично сделать из отдельного div, если бы он не был визуализирован с помощью дочернего повторителя. На изображении ниже Блог и Сервисы являются узлами верхнего уровня, и их подчиненные узлы (по 2 для каждого) должны отображаться в голубой строке ниже. Это возможно?

изображение


person user260012    schedule 13.02.2010    source источник


Ответы (2)


Чтобы получить DataItem родительских повторителей, как если бы вы не находились внутри дочернего репитера:

<%# DataBinder.Eval(((System.Web.UI.WebControls.RepeaterItem)Container.Parent.Parent).DataItem, "Property") %>
person Nick Craver    schedule 13.02.2010
comment
Привет, Ник, ты можешь расширить это на основе вышеупомянутого сценария? Мне нужно перечислить дочерние элементы репитера текущего узла (родительского). Это должно быть в форме отдельного элемента div с некоторым кодом для создания нового дочернего повторителя внутри. Спасибо за вашу помощь. - person user260012; 15.02.2010

Я решил это сейчас. Для всех, кто сталкивался с этим постом, вот решение:

<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 заботится о стилизации контейнера списка, после чего элементы повторителя отображаются по одному со смещением 1 для текущего узла. Это выглядит легко, судя по тому, что я видел в сети, я просто новичок в некоторых элементах ASP.NET :) Спасибо.

person user260012    schedule 15.02.2010