Determinare il nome di visualizzazione corrente all'interno di una vista parziale in ASP.NET MVC
-
16-09-2019 - |
Domanda
ho una visione parziale nel mio test applicazione ASP.NET MVC. Questo punto di vista è responsabile per visualizzare i pulsanti di menu delle applicazioni.
Voglio cambiare il colore del tasto che è attualmente pagina attiva. Attualmente qualcosa che ho scritto come:
<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>
E impostare i dati di visualizzazione in azioni di controllo:
//in home action
ViewData["currentPage"] = "Home";
//in About action
ViewData["currentPage"] = "About";
Questo funziona ma devo modificare ogni azione del controller. Esiste un metodo migliore di rilevare automaticamente la vista e in qualche modo modificare il codice vista parziale per cambiare il colore di conseguenza.
Soluzione
Credo che non avete bisogno di Viewdata [ "currentPage"]. Uso ViewContext.RouteData.Values
invece:
Prova questo:
<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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow