Question

J'ai une vue partielle dans mon test application ASP.NET MVC. Ce point de vue est responsable pour afficher les boutons de menu d'application.

Je veux changer la couleur du bouton qui est actuellement page active. Actuellement quelque chose je l'ai écrit comme:

<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>

Et définir les données de vue dans les actions du contrôleur:

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

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

Cela fonctionne, mais je dois modifier chaque action du contrôleur. Y at-il une meilleure méthode de détection automatique de la vue et changer en quelque sorte le code de la vue partielle de changer la couleur en conséquence.

Était-ce utile?

La solution

Je pense que vous ne avez pas besoin ViewData [ "currentPage"]. Utilisez ViewContext.RouteData.Values à la place:

Essayez ceci:

<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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top