Umbraco 7 动态菜单

Umbraco 7 dynamic menu

美好的一天! 在 Umbraco 上工作并努力在 Umbraco 中创建动态菜单。 应使用 menuName 调用菜单 li。

它适用于第一个循环(称为 item.menuName 的静态菜单),但在第二个循环中不起作用 - node.menuName。 node.Name 有效,但 .menuName 无效。为什么?

谢谢!

    var homePage = CurrentPage.AncestorsOrSelf(1).First();
    var menuItems = homePage.Children.Where("UmbracoNaviHide == false");

<ul class="menu">

    @foreach (var item in menuItems)
    {
        var childrenItems = item.Children.Where("UmbracoNaviHide == false");
        <li class="@(CurrentPage.Id == item.Id ? "sel" : null)">
            <a href="@item.Url"><h4>@item.menuName</h4></a>
            @createSubmenu(childrenItems, item.Id)
        </li>
    }
</ul>

@helper createSubmenu(IEnumerable<IPublishedContent> nodes, int? parentId) {
    if (nodes.Count() > 0){
        <ul>
        @foreach (var node in nodes)
        {
            var childrenItems = node.Children.Where("UmbracoNaviHide == false");
            <li class="@(CurrentPage.Id == node.Id ? "sel" : null)">
                <a href="@node.Url"><h5>@node.menuName</h5></a>
                @createSubmenu(childrenItems, node.Id)
            </li>
        }
        </ul>
    }
}

当您不使用强样式视图时,UmbracoTemplatePageCurrentPage 属性 是 dynamic,这意味着 @item.menuItem 是可访问的。

然而,您的 createSubmenu 助手将动态转换为 IPublishedContent,它没有成员 menuName 可用。您将需要使用 GetPropertyValue 方法:

@helper createSubmenu(IEnumerable<IPublishedContent> nodes, int? parentId)
{
    if (nodes.Count() > 0)
    {
        <ul>
            @foreach (var node in nodes)
            {
                var childrenItems = node.Children.Where("UmbracoNaviHide == false");
                <li class="@(CurrentPage.Id == node.Id ? "sel" : null)">
                    <a href="@node.Url"><h5>@node.GetPropertyValue("menuName")</h5></a>
                    @createSubmenu(childrenItems, node.Id)
                </li>
            }
        </ul>
    }
}