Determinare il nome di visualizzazione corrente all'interno di una vista parziale in ASP.NET MVC

StackOverflow https://stackoverflow.com/questions/1141954

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.

È stato utile?

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