2011-10-11 46 views
2

私はMVC3 C#.Netプロジェクトを持っています。最初にWebサイトをロードするときに、インデックスページにルーティングして、画面の上部にあるナビゲーションタブを選択が無効になるまで無効にしたいとします。選択が行われると、サイトは詳細ページにルーティングされます。私は、ナビゲーションメニューのテーマを有効にしたいと思います。これどうやってするの? ViewBagを渡しますか?わからないMVC3 _Layout.cshtml ...メニュー項目の無効/有効化

+0

をレンダリング

<li style="visibility: "><a href="/Home/About">About</a></li> 

は、詳細ページでのみ有効なナビゲーション項目はありますか?インデックスページに戻るとどうなりますか? – itsmatt

答えて

2

私の質問に対する回答が見つかりました。 @ CodeRushの答えはクールで、別のシナリオで使用します。しかし私は、私のprticular状況のために、以下の実装が好きです。 Object1Controllerインデックスがアクションを取得するには、私は以下のコードを追加:リンクはIndexビュー上でクリックされたときに

ViewBag.Hidden = "hidden"; 

次に詳細にアクションであるアクションが、呼び出される、私はこのコードを追加:

<li style="visibility: @ViewBag.Hidden">@Html.ActionLink("About", "About", "Home")</li> 

としてレンダリング:

ViewBag.Hidden = "visible"; 
はその後_Layout.cshtmlに、私はこのコードを追加しました他のコントローラで

または

<li style="visibility: visible"><a href="/Home/About">About</a></li> 

visibility属性のデフォルトは「可視」であることから、私はViewBag.Hiddenプロパティを設定する必要はありません。他のコントローラの場合は、ViewSourceは示していますように見える

2

インデックスページはウェブサイトの残りのレイアウトに従わないため、インデックスページにマスターレイアウトを使用しないでください。あなたのインデックスページ

@{ 
    ViewBag.Title = "Index page"; 
    // Null or a custom layout 
    Layout = null; 
} 

<p>Your content below</p> 

あなたには、いくつかの条件にメニューをレンダリングする場合は、例えば、部分的なビューモデルでメニューを保存しますSiteNavigation.cshtml

このビューは、何らかの条件に基づいてレンダリングできます。例えば。

@if(true){ 
    @{ Html.RenderPartial("SiteNavigation"); } 
} 
+0

@CodeRush ....クールなアイデア。私は部分レンダリングが好きです。私はそれが利用可能だったか分からなかった。私はまた解決策を思いついた。下記参照。ありがとう – MikeTWebb

+0

私はそれがかなり多くの人々のための問題だと思います。彼らは、どれだけ多くの道具を自由に使うことができるか知らずに飛び立ちます。 –

関連する問題