Доступ к SiteMapNode Container.DataItem из-за пределов родительского повторителя - PullRequest
0 голосов
/ 13 февраля 2010

Я пытаюсь получить доступ к текущему «активному» узлу верхнего уровня из повторителя карты сайта из-за пределов повторителя 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 для каждого) должны отображаться в светло-голубой строке ниже. Это возможно?

image

Ответы [ 2 ]

0 голосов
/ 15 февраля 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 :) Спасибо.

0 голосов
/ 13 февраля 2010

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

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