2009-01-24 17 views
7

¿Hay una manera mejor de hacer esto?asp.net mvc y css: Tener la pestaña del menú permaneciendo resaltada en la selección

Tengo un método de extensión de ayuda HTML que comprueba si el menú de la pestaña actual es el seleccionado y luego elige la clase .selected css o no. Pongo el enlace html.IsSelected en cada li como

<li class="<%=Html.IsSelected(string a, string b)%>" > 

donde a es el nombre de la ficha y B se asigna ViewData.

¿Está limpio o hay una manera mejor?

Respuesta

2

Si puede vivir con una solución javascript, mire cómo funciona el complemento jQuery UI Accordion. Esencialmente, puede elegir la pestaña resaltada basada en el controlador examinando la url de solicitud cuando se carga la página.

Como alternativa, puede establecer un elemento ViewBag para cada pestaña que corresponda al valor de clase de la pestaña. Establezca el valor de la pestaña actual en la clase CSS activa y los demás en vaciar (o sus valores predeterminados). Luego puede usar:

<li id="HomeTab" class="<%= ViewBag.HomeTabClass %>" /> 
<li id="OtherTab" class="<%= (string)ViewBag.OtherTabClass %>" /> 

En su controlador, debe configurar los valores adecuados para las variables ViewData.

ViewBag.HomeTabClass = "tab activeTab"; 
ViewBag.OtherTabClass = "tab"; 
+0

eso es lo que más o menos lo que hice, usé ViewData para asignar clases. ¿Diría que la solución java es más eficiente o mejor por algún motivo en particular? – zsharp

+1

El uso de la solución javascript evita tener que agregar código a cada acción para establecer la pestaña correcta, aunque supongo que podría obtener básicamente lo mismo al implementar en OnActionExecuting. La desventaja de usar javascript es que está roto si JavaScript está desactivado. – tvanfosson

+0

Si tengo más de cinco elementos de menú y subelementos, ¿cómo puedo usar su respuesta? –

5

Este enfoque que estoy usando en uno de mis proyectos y está trabajando muy bien. Asigné en cada controlador ViewData ["Home"] = "activeTab" clase, y uso en la vista un valor predeterminado de cadena vacía, como se muestra a continuación. Esto activará la pestaña si se toma el valor de ese diccionario viewData. Es simple y muy limpio.

Su controlador casa se verá así:

 ViewData["Home"] = "activeTab"; 

     return View("Index"); 
    } 

La vista se verá así:

<li class="<%= ((string)ViewData["Home"] ?? "") %>"><%= Html.ActionLink("Home", "Index", "Home")%></li> 
<li class="<%= ((string)ViewData["About"] ?? "") %>"><%= Html.ActionLink("About", "About", "Home")%></li> 
1

He tratado de conseguir que esto funcione sin suerte.

¿Cómo es tu CSS? El mío está abajo.

.activeTab { background: #FFFFFF; color: # 000000; }

Estoy usando esto con la página maestra y no con la vista inicial, no estoy seguro si eso lo está afectando.

Cuestiones relacionadas