2012-02-01 8 views
3

私はナビゲーションメニュー付きのウェブページを持っています。現在のページを強調表示する必要があります。これにはcssクラスを追加します。しかし、このメニューはレイアウトページで定義されているので、現在のメニュー項目にどのようにクラスを追加できますか?カミソリのレイアウトファイルの要素にCSSクラスを追加する最も良い方法は?

私が考えることができる唯一の解決策は、各メニュー項目に固有のViewBagプロパティを使用し、それを使用して適切なActionメソッドからクラスを追加することです。 例:

<div class="link @ViewBag.DashboardActive"> 
    @Html.ActionLink("Dashboard", "Index") 
</div> 
<div class="link @ViewBag.Item2Active"> 
    @Html.ActionLink("Item2", "Item2") 
</div> 

など

これは仕事をしていませんが、私はこの問題を解決するために、よりエレガントな方法があることを感じています。

答えて

3

これらのメニューを生成し、現在選択されている項目にCSSクラスを適用するカスタムヘルパーを作成することができます。あなたはfollowing exampleを見てください。アンカーを使用するsimilarがあります。

+0

私が見た最もクリーンな解決策+1 :) –

+0

おかげで、それは素晴らしい解決策のように見えます!他のいくつかの問題が修正された後、私は後でそれを実装します。 – Hanno

1

使用する各アクションでViewBagプロパティを設定しない場合は、@Html.RenderActionメソッドを使用します。

これはあなたのビューである:/ Iがコントローラに適用されることを、私が使用して、選択したメニュー項目カスタムアクションフィルター属性を設定するための私のプロジェクトで

[HttpGet, ChildActionOnly] 
public PartialViewResult Menu(string selectedItem) 
{ 
    ViewBag.SelectedItem = selectedItem; 
    return PartialView("Menu"); 
} 

@{ Html.RenderAction("Menu", "MyController", new {selectedItem = "dashboard"}); } 

これはあなたのメニューアクションですアクション。

関連する問題