Pregunta

Tengo una vista parcial en mi prueba de aplicación ASP.NET MVC. Este punto de vista es responsable de mostrar los botones de menú de la aplicación.

Quiero cambiar el color del botón que se encuentra actualmente la página activa. Actualmente algo que he escrito como:

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

Y establecer los datos de vista en las acciones del controlador:

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

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

Esto funciona, pero tengo que modificar cada acción del controlador. ¿Hay algo mejor método para detectar automáticamente la vista y de alguna manera cambiar el código de la vista parcial para cambiar el color en consecuencia.

¿Fue útil?

Solución

Creo que no necesita ViewData [ "currentPage"]. Uso ViewContext.RouteData.Values lugar:

Prueba esto:

<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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top