Necesito resaltar el enlace activo en el menú. Mi menú está en la página maestra por cierto. Estoy buscando la mejor manera de implementar esto? ¿Algunas ideas?Asp.Net Mvc resaltando la técnica de enlace de página actual?
Respuesta
La mejor manera de manejar esto es escribiendo un ayudante de HTML. Puede usar RouteData.Values["action"]
para obtener la acción que se está ejecutando actualmente y compararla con el nombre del menú, y si coinciden, aplique una clase de CSS que lo resalte.
public static MvcHtmlString MenuItem(
this HtmlHelper htmlHelper,
string action,
string text
)
{
var menu = new TagBuilder("div");
var currentAction = (string)htmlHelper.ViewContext.RouteData.Values["action"];
if (string.Equals(
currentAction,
action,
StringComparison.CurrentCultureIgnoreCase)
)
{
menu.AddCssClass("highlight");
}
menu.SetInnerText(text);
return MvcHtmlString.Create(menu.ToString());
}
y luego utilizar esta ayuda para hacer que los elementos del menú:
<%: Html.MenuItem("about", "About us") %>
<%: Html.MenuItem("contact", "Contact us") %>
...
Hola, Darin. ¿Dónde se pone HTML Helpers? ¿Una nueva carpeta y luego usa "imports" para incluirla? ¿Cómo puedo usar esto? Gracias. – user1477388
sí, ¿dónde poner esto? – 4pie0
No hay convención ni lugar específico para colocar los ayudantes HTML personalizados. Personalmente coloco los métodos de extensión en una carpeta de Ayudantes. –
Estoy bastante seguro de que usted puede hacer esto con CSS puro. Involucra selectores de clases y se daña con la etiqueta corporal. Me gustaría ir con el método de ayuda todos los días de la semana.
que utilizan esta solución:
Primera - añadir los datos de atributo-menuPageId a su menú de enlaces
<ul class="menu">
<li data-menuPageId="home">
@(Html.Link<HomeController>(x => x.Index(), "Home"))
</li>
<li data-menuPageId="products">
@(Html.Link<ProductsController>(x => x.Index(), "Products"))
</li>
</li>
Siguiente - añadir campo oculto de la página actual Id a Layout.cshtml
<input type="hidden" id="currentPageId" value="@(ViewBag.Page ?? "home")" />
Agregue la inicialización de ViewBag.Page en sus páginas como Inicio o Productos
@{
ViewBag.Page = "products";
}
y lo último que debe hacer referencia a este javascipt de yor Layout.cshtml
$(function() {
var pageIdAttr = "data-menuPageId";
var currentPage = $("#currentPageId").attr("value");
var menu = $(".menu");
$("a[" + pageIdAttr + "]").removeClass("selected");
$("a[" + pageIdAttr + "=\"" + currentPage + "\"]", menu).addClass("selected");
});
Siempre estoy usando esta solución HTML Parte
<ul>
@Html.ListItemAction("Home Page","Index","Home")
@Html.ListItemAction("Manage","Index","Home")
</ul>
ayudante Parte
public static class ActiveLinkHelper
{
public static MvcHtmlString ListItemAction(this HtmlHelper helper, string name, string actionName, string controllerName)
{
var currentControllerName = (string)helper.ViewContext.RouteData.Values["controller"];
var currentActionName = (string)helper.ViewContext.RouteData.Values["action"];
var sb = new StringBuilder();
sb.AppendFormat("<li{0}", (currentControllerName.Equals(controllerName, StringComparison.CurrentCultureIgnoreCase) &&
currentActionName.Equals(actionName, StringComparison.CurrentCultureIgnoreCase)
? " class=\"active\">" : ">"));
var url = new UrlHelper(HttpContext.Current.Request.RequestContext);
sb.AppendFormat("<a href=\"{0}\">{1}</a>", url.Action(actionName, controllerName), name);
sb.Append("</li>");
return new MvcHtmlString(sb.ToString());
}
}
En diseño intente lo siguiente:
@{
string url = Request.RawUrl;
}
@switch (url)
{
case "/home/":
@Html.ActionLink("Home", "../home/", null, new { @style = "background:#00bff3;" })
@Html.ActionLink("Members", "../home/MembersList/")
break;
case "/home/MembersList/":
@Html.ActionLink("Home", "../home/")
@Html.ActionLink("Members", "../home/MembersList/", null, new { @style = "background:#00bff3;" })
break;
default:
@Html.ActionLink("Home", "../home/")
@Html.ActionLink("Members", "../home/MembersList/")
break;
}
Si desea adjuntar también la información del controlador favor echar un vistazo a este enlace
- 1. ASP.NET MVC - Destacando la página actual en la navegación
- 2. ¿Cómo se indica visualmente la página actual en ASP.NET MVC?
- 3. Cómo generar un enlace de página emergente en ASP.NET MVC
- 4. URL actual en asp.net mvc
- 5. ¿Cómo obtener la URL de la página actual en asp.net usando el código detrás de la técnica?
- 6. redirigir a la página actual en ASP.Net
- 7. enlace a un elemento dentro de la página actual
- 8. Enlace a la página actual sin cadena de consulta
- 9. Enlace de parámetros de ASP.NET MVC ActionFilter
- 10. ASP.net MVC - Navegación y poner de relieve el vínculo "actual"
- 11. ASP.net MVC obtener viewengine actual
- 12. Asp.Net MVC DropDownList Enlace de datos
- 13. Año actual en ASP.NET MVC 3
- 14. asp.net mvc parámetro de la página a una vista parcial
- 15. Espere la página en ASP.NET MVC
- 16. Tiempo de generación de página - ASP.Net MVC
- 17. página ASP.NET MVC/subpágina enrutamiento
- 18. ¿Cómo destaco un enlace basado en la página actual?
- 19. ASP.Net MVC 3 - Enlace de modelo JSON a la matriz
- 20. ¿Cómo determinar la versión actual de ASP.NET MVC?
- 21. ASP.NET MVC página de carga con AJAX
- 22. ¿Cómo verifica si la página actual usa SSL en ASP.Net?
- 23. Cualquier ayuda de navegación de página para ASP.NET MVC?
- 24. asp.net mvc área de página por defecto
- 25. Ciclo de vida de la página Razor en ASP.NET MVC
- 26. ASP.NET MVC Enlace a un diccionario
- 27. ASP.NET MVC ¿cómo implementar el enlace que regresa a la página anterior?
- 28. Obtienen el directorio actual en asp.net mvc
- 29. ¿Cuál es el estado actual de la técnica en látex?
- 30. establecer usuario actual en asp.net mvc
Hw Cómo se almacenan los elementos de menú? Puede asociarlos con el controlador y la acción y resaltar basándose en estos valores. – LukLed
Los estoy almacenando en una página maestra como estática. – beratuslu
¿Ya está cubierto aquí? Ver: http://stackoverflow.com/questions/1471362/how-to-visually-indicate-current-page-in-asp-net-mvc – thmshd