2015-03-31 114 views
0

我试图用下拉导航菜单锚点来构建主导航。我已经准备好了CSS,但是我不知道如何在sublayout及其后面的代码中做到这一点。(Sitecore)与子导航导航

我做了大量的导航,但这些都是使用asp:repeaters或asp:ListViews的一维菜单。

任何人都可以指向正确的方向吗?

回答

2

本质上你会想要在导航上显示的层数(或“维度”)上有嵌套的中继器。看下面的例子。

<asp:Repeater runat="server" ID="TopNavRepeater" OnItemDataBound="TopNavRepeater_OnItemDataBound"> 
    <ItemTemplate> 
     <sc:Link runat="server" ID="sclTopLink" Field="__Display Name" /> 
     <asp:Repeater runat="server" ID="SecondNavRepeater" OnItemDataBound="SecondNavRepeater_OnItemDataBound"> 
      <ItemTemplate> 
       <sc:Link runat="server" ID="sclSecondLink" Field="__Display Name" /> 
      </ItemTemplate> 
     </asp:Repeater> 
    </ItemTemplate> 
</asp:Repeater> 

您将希望获得绑定到顶级中继器的每个项目的子项并将其绑定到第二个中继器。使用Sitecore链接控件通过设置OnItemDataBound事件中的项目和字段来呈现指向页面的链接。

下面参见粗略例如

protected void Page_Load(object sender, EventArgs e) 
{ 
    TopNavRepeater.DataSource = YourHomeItem.Children(); 
    TopNavRepeater.DataBind(); 
} 
protected void TopNavRepeater_OnItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     var item = e.Item.DataItem as Item; 
     if (item == null) 
      return; 

     var sclTopLink = e.Item.FindControl("sclTopLink") as Link; 
     var SecondNavRepeater = e.Item.FindControl("SecondNavRepeater") as Repeater; 

     if (sclTopLink != null) 
     { 
      sclTopLink.Item = item; 
     } 

     if (SecondNavRepeater != null) 
     { 
      SecondNavRepeater.DataSource = item.Children; 
      SecondNavRepeater.DataBind(); 
     } 
    } 
}