2009-07-17 15 views
4

テスト用のASP.NET MVCアプリケーションに部分的なビューがあります。このビューは、アプリケーションメニューボタンを表示します。ASP.NET MVCの部分ビュー内の現在のビューの名前を確認

現在アクティブなページのボタンの色を変更したいと思います。現在、私のようなものが書かれている:

<ul id="menu"> 
    <% var activeClass = (string)(ViewData["currentPage"]) == "Home" ? "activeMenuButton" : ""; %>  
    <li><%= Html.ActionLink ("Home", "Index", "Home", new { @class = activeClass })%></li> 

    <% activeClass = (string)(ViewData["currentPage"]) == "About" ? "activeMenuButton" : ""; %>  
    <li><%= Html.ActionLink ("About", "About", "Home", new { @class = activeClass })%></li> 
</ul> 

をし、コントローラのアクションのビューデータを設定します。

//in home action 
ViewData["currentPage"] = "Home"; 

//in About action 
ViewData["currentPage"] = "About"; 

これは動作しますが、私はすべてのコントローラのアクションを変更する必要があります。自動的にビューを検出し、部分的にビューコードを変更して色を変更する方法がありますか?

答えて

7

あなたはViewData ["現在のページ"]が必要ないと思います。代わりにViewContext.RouteData.Valuesを使用してください:

はこれを試してみてください:

<ul id="menu"> 
    <% var activeClass = (ViewContext.RouteData.Values["Controller"] == "Home" 
     && ViewContext.RouteData.Values["Action"] == "Home") ? "activeMenuButton" : ""; %> 

    <li><%= Html.ActionLink ("Home", "Index", "Home", new { @class = activeClass })%></li> 

    <% activeClass = (ViewContext.RouteData.Values["Controller"] == "Home" 
     && ViewContext.RouteData.Values["Action"] == "About") ? "activeMenuButton" : ""; %> 

    <li><%= Html.ActionLink ("About", "About", "Home", new { @class = activeClass })%></li> 
</ul> 
+0

これは私をたくさん助けました。ありがとう。 fyiとして、私はこの情報を得るためにこの邪悪な部分を使っていました:String currentView =((WebFormView)ViewContext.View).ViewPath;これに関する私の問題は、理由が不明なため、1つのViewControlでは動作しますが、別のViewControlでは動作しないことと、両方が同じページにロードされることです。それはおそらく私の最後にID10Tのエラーですが、問題の理由はすぐに明らかではありません。再度、感謝します。 – jason

関連する問題