(Sitecore)使用子导航进行导航

时间:2015-03-31 14:01:48

标签: menu navigation sitecore

我正在尝试使用下拉子导航菜单锚来构建主导航。我已准备好使用CSS的HTML,但我不知道如何在子布局及其后面的代码中执行此操作。

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

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:2)

基本上,您希望在导航上显示的级别数(或#34;尺寸")上嵌套中继器。请参阅下面的示例。

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

您需要将每个项目的子项绑定到Top Repeater并将其绑定到第二个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();
        }
    }
}