2012-01-18 4 views
0

レイアウト(テーマ)内でサブナビリンクを別々に表示しようとしています。オーチャードディスプレイのサブナビリンクは別途

「ルート」レベルのナビゲーションリンクのみを表示するMenuItem.cshtmlをオーバーライドしました。しかし今、私はLayout.cshtmlのModelからItem.Itemsにアクセスする方法を理解しようとしています。

Menu.Itemsを公開するモデルをどのようにキャストしますか?

例:製品1.0は、製品ページを表示するときに エレクトロニクス1.1 私はあなたが正確に達成したいのか分からない1.3

答えて

0

家具1.2 事務用品を見ることが

2.0をサポートしていますが、IあなたはAdvanced Menu moduleを見てみましょう:使いやすい階層メニューとメニューウィジェットがあり、レイアウトに組み込んで独立したメニューやサブメニューを簡単に表示できます。

1

アドバンストメニューで大したことはありませんでした。私がそれを使うのを妨げたバグがいくつかありました。私が見つけた

私のソリューションは、きれいなコードではなく、リファクタリングする必要がありますが、ここにある: 私はPartialViewは、私は2番目をしたいLayout.cshtmlためModel.Navigation

コードを(キャストレンダリング

PartialViewのコード

@model IEnumerable<dynamic> 

@{ 
    IEnumerable<dynamic> subNavLinks = null; 
    string requestUrl = Request.Path.Replace(Request.ApplicationPath, string.Empty).TrimEnd('/').ToUpperInvariant(); 
    IEnumerable<dynamic> children = Model.FirstOrDefault(x => x.MenuName == "main").Items; 
    var menuItems = children.Select(x => x.Item); 
    var parent = menuItems.FirstOrDefault(x => x.Text.TextHint.Equals(requestUrl, StringComparison.InvariantCultureIgnoreCase)); 
    if(parent!=null) 
    { 
     subNavLinks = menuItems.Where(x => x.Position.StartsWith(parent.Position.Substring(0,1)) && x.Position.Length>1); 
    } 
} 


<nav> 
    <ul class="subNav"> 
    @if (subNavLinks != null) 
    { 
     foreach (var item in subNavLinks) 
     { 
      <li><a class="@className" href="@item.Href">@item.Text</a></li> 
     } 
    } 
    </ul> 
</nav> 
+0

'VAR subNavLinks =メニューアイテム{Html.RenderPartial( "SubNavMenu"、(IEnumerableを)Model.Navigation)} @表示するサブメニュー)
.Where(x => x.Position.StartsWith(parentPosition.Substring(0,1))&& x.Position.Length> 1); ' – dave

関連する問題