从Parent Repeater外部访问SiteMapNode Container.DataItem

时间:2010-02-13 00:55:47

标签: asp.net css repeater sitemap

我正在尝试从用于呈现它的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 :(得分:0)

要获得父转发器DataItem,就像您不在子转发器中一样:

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

答案 1 :(得分:0)

我现在已经解决了这个问题。对于遇到这篇文章的其他人来说,这是解决方案:

<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的一些元素相当新:)谢谢。

相关问题