2014-11-04 3 views
1

다음과 같이 내 탐색/노드 구조는 다음과 같습니다Umbraco 및 면도기 : CurrentPage/모델은 아동, 상태 인 경우

홈을
--About 우리
--Our 서비스
----- 금융
----- 보험

현재 코드가 노드를 반복하고 있습니다. 'CurrentPage'에 자식이 있으면 메뉴에는 자식이 포함됩니다.

이 루프의 문제는 자녀 (금융 또는 보험) 중 하나가 '현재 페이지'일 때 CurrentPage에 더 이상 자식이 없기 때문에 '서비스'노드의 'if'조건이 실패하므로 'Finance '및'보험 '이 더 이상 메뉴에 남아 있지 않습니다.

나에게 'if', '||' 기본적으로 감사

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

답변

2
  1. 첫 번째 foreach는 아래

    코드를 말한다 '또는 CurrentPage 아이 노드 인'것이다 절은 홈에서해야합니다. (레벨 1의 집인가요?)

  2. 아이가없는 경우 반복하지 않기 때문에 if (has children) 체크를 수행 할 필요가 없습니다.

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

안녕하세요, 예 가정은 레벨 1입니다. 코드로 레벨 3의 서브 페이지가 항상 표시됩니다. 부모가 선택되었을 때만 나타 내기를 원합니다. 감사합니다 – ManxJason

+0

안녕하세요, 그렇지 않습니다. 동일한 문제가 발생하는 'if'를 지정하지 않으면 금융 및 보험이 항상 표시됩니다. 위의 코드는 기본적으로 내 리팩토링, if 조건을 뺀 것입니다. 환호 – ManxJason

+0

나는 그것을 이해하지 못 했어. 내 대답을 업데이 트됩니다 ..하지만, SEO 이유로, 당신은 CSS를 대신 이러한 숨길해야 기억하십시오. –