質問

テスト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";

これは機能しますが、すべてのコントローラーアクションを変更する必要があります。ビューを自動的に検出し、それに応じて色を変更するために部分ビューコードを何らかの形で変更するより良い方法はありますか?

役に立ちましたか?

解決

viewdata ["currentPage"]は必要ないと思います。使用する 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>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top