2013-03-22 366 views
1

我想我需要一點幫助,在這裏使用Razor viewengine渲染Umbraco中的遞歸樹菜單結構。剃刀遞歸樹形菜單結構

我需要呈現以下樹形菜單結構:

Page 1 
    Page 2 
     Page 3 
     Page 4 
       Page 5 
    Page 6 
    Page 7 

所以,當我在Page 5我需要的父節點上使用CSS類"open"Page 4Page 2Page 1和CSS類"active"上我站在的節點。

我得呈現在菜單中點擊鏈接時,正確的節點結構,但我根本無法弄清楚如何運用正確的類:-(

我的代碼如下:

@{ 
     DynamicNode current = Model; 
     var nodes = Model.AncestorOrSelf(2).Children.Where("Visible");   
     if(nodes.Any()) 
     { 
      <ul class="side-nav-list"> 
       @foreach(var node in nodes) 
       { 
        bool isDescendantOrSelf = current.IsDescendantOrSelf(node); 
        <li> 
         <a href="@node.Url">@node.Name</a> 
         @if(isDescendantOrSelf) 
         { 
          @RenderSubMenuRecursive(node) 
         } 
        </li> 
       } 
      </ul> 
     } 
    } 

@helper RenderSubMenuRecursive(DynamicNode node) 
{ 
    if(node.Children.Any(x => x.GetPropertyValue("umbracoNaviHide").Equals("0") && Model.IsDescendantOrSelf(node))) 
    {   
     var childNodes = node.Children.Where(x => x.GetPropertyValue("umbracoNaviHide").Equals("0")); 
     string css = node.IsAncestor(Model) ? "open" : ""; 
     <ul> 

      @foreach(var childNode in childNodes) 
      { 
       <li class="@css">      
        <a href="@childNode.Url">@childNode.Name</a> 
        @if (childNode.IsDescendantOrSelf(node)) 
        { 
         @RenderSubMenuRecursive(childNode) 
        } 
       </li> 
      } 
     </ul> 
    } 
} 

任何幫助/提示對此非常感謝!:-)提前致謝!

回答

6

通過身邊的一些代碼等最終解決方案移動解決它自己:

@{ 
     DynamicNode current = Model; 
     var nodes = Model.AncestorOrSelf(2).Children.Where("Visible");   
     if(nodes.Any()) 
     { 
      <ul class="side-nav-list"> 
       @foreach(var node in nodes) 
       {       
        @RenderSubMenuRecursive(node)           
       } 
      </ul> 
     } 
    } 

@helper RenderSubMenuRecursive(DynamicNode node) 
{  
    var childNodes = node.Children.Where(x => x.GetPropertyValue("umbracoNaviHide").Equals("0")); 
string css = node.IsAncestor(Model) ? "open" : ""; 

if(node.Id == Model.Id) 
{ 
    css = "active"; 
} 

<li class="@css"> 
    <a href="@node.Url">@node.Name</a> 

    <ul>    
     @foreach (var childNode in childNodes.Where(childNode => Model.IsDescendantOrSelf(node))) 
     { 
      @RenderSubMenuRecursive(childNode) 
     } 
    </ul> 
</li>  
} 
+0

您好,我試圖讓這對一個項目中,我目前做的工作,但它的錯誤了。你可以發佈頁面的完整代碼,因爲我想我錯過了一些@using NAMSPACE的東西? – 2013-09-12 09:56:57