2011-07-29 18 views
2

マルチレベルドロップドロップメニューを作成しようとしています。私はumbraco CMSを使用しています。UmbracoでRazorを使用したマルチレベルドロップダウンメニュー

私は何を探していますがのようなものです:

<div id="TopMenu"> 
     <ul class="myMenu"> 
      <li><a href="#">Home</a></li> 
      <li><a href="#">About Us</a></li> 
      <li><a href="#">Products</a> 
        <ul> 
         <li><a href="#">Products1</a></li> 
         <li><a href="#">Products2</a></li> 
         <li><a href="#">Products3</a></li> 
        </ul> 
        </li> 
      <li><a href="#">ContactUs</a></li> 

     </ul> 
    </div><!--TopMenu--> 

そしてUmbracoで、私はそれを動作させるためのCSHTMLを作成しました:

<ul class="myMenu"> 
<li><a href="/">Home</a> </li> 
@foreach (var page in @Model.AncestorOrSelf(1).Children) 
{ 
    string style = ""; 
    if (1 == 1) { style = "class=\"current\""; } 
    <li><a href="@page.Url" @style>@page.Name</a></li> 


} 

以上かみそりの構文はのために正常に動作しますAncestorOrSelf(1)はトップレベルですが、AncestorOrSelf(2)の製品のサブノードが必要です。これを達成する方法を知っていますか

ありがとう

答えて

9

これは、私は現在、私のプロジェクトで使用しているかみそりコードです:

@foreach (var page in Model.AncestorOrSelf(1).Children.Where("Visible")) 
{ 
    <li><a href="@page.Url">@page.Name</a> 
    if (page.Children.Where("Visible").Count() > 0) 
    { 
     <ul> 
     @foreach (var subpage in page.Children.Where("Visible")) 
     { 
      <li><a href="@subpage.Url">@subpage.Name</a></li> 
     } 
     </ul> 
    } 
    </li> 
} 

内部ループサイクルを外側のループのノードのすべての子を。

+2

+1妥当なhtmlを除いて 'li'は最後の'} 'の直前で閉じるべきです。もしあなたがumbracoNaviHideを使っているならば' ... Children.Where( "Visible") ' – Myster

+1

この回答は私のために働いたが、if(if.page.Children.Where ..)の前に@ missingがあると信じている。 – Migs

+0

私はあまりにも@Migsと思ったが、Visual Studioは削除するまで苦情を申し立てた。 – Geekatron

関連する問題