La détermination du nom de la vue actuelle dans une vue partielle dans ASP.NET MVC
-
16-09-2019 - |
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.
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