In ASP.NET MVC applications, the Html.ActionLink helper is commonly used to create navigation links. When incorporating Bootstrap styling, it's essential to apply the "active" class to the corresponding navigation element. This article will guide you through adding the "active" class to navigation links using the Html.ActionLink helper and provide a more elegant solution using an HTML helper extension.
Consider the following scenario:
<ul class="nav navbar-nav"> <li>@Html.ActionLink("Home", "Index", "Home", null, new {@class="active"})</li> <li>@Html.ActionLink("About", "About", "Home")</li> <li>@Html.ActionLink("Contact", "Contact", "Home")</li> </ul>
This code generates the navigation links, but the "active" class is applied to the tag, leading to an invalid Bootstrap structure. To fix this, apply the "active" class to the
<ul class="nav navbar-nav"> <li class="active">@Html.ActionLink("Home", "Index", "Home")</li> <li>@Html.ActionLink("About", "About", "Home")</li> <li>@Html.ActionLink("Contact", "Contact", "Home")</li> </ul>
This will correctly apply the "active" class to the current navigation element based on the active page.
To provide a more flexible and reusable solution, you can create an HTML helper extension like this:
public static string IsSelected(this HtmlHelper html, string controllers = "", string actions = "", string cssClass = "selected") { ViewContext viewContext = html.ViewContext; bool isChildAction = viewContext.Controller.ControllerContext.IsChildAction; if (isChildAction) viewContext = html.ViewContext.ParentActionViewContext; RouteValueDictionary routeValues = viewContext.RouteData.Values; string currentAction = routeValues["action"].ToString(); string currentController = routeValues["controller"].ToString(); if (String.IsNullOrEmpty(actions)) actions = currentAction; if (String.IsNullOrEmpty(controllers)) controllers = currentController; string[] acceptedActions = actions.Trim().Split(',').Distinct().ToArray(); string[] acceptedControllers = controllers.Trim().Split(',').Distinct().ToArray(); return acceptedActions.Contains(currentAction) && acceptedControllers.Contains(currentController) ? cssClass : String.Empty; }
This extension method requires three parameters: controllers, actions, and an optional CSS class. It checks if the current action and controller match the specified values and returns the cssClass if they do, or an empty string otherwise.
To use this extension, add a using statement to the page:
@using YourNamespace;
Then, in the view, you can apply the "active" class as follows:
<ul> <li>@Html.ActionLink("Home", "Home", "Default", null, new {@class="@Html.IsSelected(actions: "Home", controllers: "Default")"})</li> <li>@Html.ActionLink("About", "About", "Default", null, new {@class="@Html.IsSelected(actions: "About", controllers: "Default")"})</li> </ul>
By applying the "active" class to the proper HTML element and leveraging the HTML helper extension provided, you can effectively manage the active state of navigation links in ASP.NET MVC applications, ensuring consistency and cleaner code organization.
The above is the detailed content of How to Effectively Style Active Navigation Links in ASP.NET MVC?. For more information, please follow other related articles on the PHP Chinese website!