Umbraco&剃刀:如果CurrentPage / Model是Child,则为条件

时间:2014-11-04 14:31:55

标签: razor umbraco

我的导航/节点结构如下:

主页
- 关于我们 - 我们的服务
-----财务
-----保险

我当前的代码循环遍历节点并将它们列在一个节点中。当'CurrentPage'有孩子时,菜单包括孩子。

这个循环的问题是当其中一个孩子(财务或保险)是'CurrentPage'时,'Our Services'节点上的'if'条件失败,因为CurrentPage不再有子节点,因此'Finance' “保险”现在更长时间保留在菜单中。

我想加我'if','||'基本上会说'或CurrentPage是子节点'的子句

以下代码 感谢

<ul>
    @foreach (var page in @CurrentPage.AncestorOrSelf(1).Children)
    {
        <li class="menuItems @(page.IsAncestorOrSelf(CurrentPage) ? "selected" : null)">
            <a href="@page.Url">@page.Name test</a>
        </li>


        if (@CurrentPage.Children.Count() > 0)
        {                
            foreach (var childPage in page.Children)
            {                    
                <li class="menuItems menuChildItems @(childPage.IsAncestorOrSelf(CurrentPage) ? "selected" : null)">
                    <a href="@childPage.Url">@childPage.Name</a>
                </li>
            }
        }

    }
</ul>

1 个答案:

答案 0 :(得分:2)

  1. 第一个foreach应该来自你的家。 (你家的等级是1级吗?)

  2. 没有必要进行if(有孩子)检查,因为如果没有孩子,它就不会循环。

  3. 您只想要2级菜单吗?如果是这样,那就这样做:

    <ul>
        @foreach (var page in CurrentPage.AncestorOrSelf(1).Children)
        {
            <li class="menuItems @(page.Id == CurrentPage.Id ? "selected" : "")">
                <a href="@page.Url">@page.Name test</a>
            </li>
    
            @if(CurrentPage.Id == page.Id || CurrentPage.Parent.Id == page.Id)
            {
                foreach (var childPage in page.Children)
                {                    
                    <li class="menuItems menuChildItems @(childPage.Id == CurrentPage.Id ? "selected" : "")">
                        <a href="@childPage.Url">@childPage.Name</a>
                    </li>
                }
            }
        }
    </ul>