【问题标题】:Accessing SiteMapNode Container.DataItem from outside of Parent Repeater从父中继器外部访问 SiteMapNode Container.DataItem
【发布时间】:2011-01-16 09:31:18
【问题描述】:

我正在尝试从用于呈现它的 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 个)应显示在下面的浅蓝色行中。这可能吗?

【问题讨论】:

    标签: asp.net css repeater sitemap


    【解决方案1】:

    要获取父中继器 DataItem,就好像您不在子中继器中一样:

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

    【讨论】:

    • 嗨尼克,您能根据上述情况对此进行扩展吗?我需要列出当前节点(父)中继器的子元素。这需要采用单独的 div 元素的形式,其中包含一些代码以在其中创建新的子转发器。感谢您的帮助。
    【解决方案2】:

    我现在已经解决了这个问题。对于遇到此帖子的其他人,这是解决方案:

    <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 的某些元素还很陌生 :) 谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      相关资源
      最近更新 更多