2009-07-17 8 views
4

J'ai une vue partielle dans mon application de test ASP.NET MVC. Cette vue est responsable de l'affichage des boutons du menu de l'application.Détermination du nom de la vue actuelle dans une vue partielle dans ASP.NET MVC

Je veux changer la couleur du bouton qui est actuellement la page active. Actuellement, je l'ai écrit quelque chose 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éfinissez 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. Existe-t-il une meilleure méthode de détection automatique de la vue et modifie en quelque sorte le code de vue partielle pour changer la couleur en conséquence.

Répondre

7

Je pense que vous n'avez pas besoin de 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> 
+0

Cela m'a beaucoup aidé. Merci. En tant que fyi, j'utilisais ce morceau de mal pour obtenir cette information: String currentView = ((WebFormView) ViewContext.View) .ViewPath; Mon problème avec ceci est que, pour des raisons inconnues, cela fonctionne dans un Viewcontrol, mais pas un autre et les deux sont chargés sur la même page. C'est probablement une erreur ID10T de ma part, mais la raison de ce problème n'est pas immédiatement évidente. Merci encore. – jason

Questions connexes