Лучшим подходом является использование помощника HTML:
using System.Web.Mvc;
using System.Web.Mvc.Html;
public static class MenuExtensions
{
public static MvcHtmlString MenuItem(
this HtmlHelper htmlHelper,
string text,
string action,
string controller
)
{
var li = new TagBuilder("li");
var routeData = htmlHelper.ViewContext.RouteData;
var currentAction = routeData.GetRequiredString("action");
var currentController = routeData.GetRequiredString("controller");
if (string.Equals(currentAction, action, StringComparison.OrdinalIgnoreCase) &&
string.Equals(currentController, controller, StringComparison.OrdinalIgnoreCase))
{
li.AddCssClass("active");
}
li.InnerHtml = htmlHelper.ActionLink(text, action, controller).ToHtmlString();
return MvcHtmlString.Create(li.ToString());
}
}
, а затем:
<ul>
@Html.MenuItem("Home", "Home", "Home")
@Html.MenuItem("Products", "Index", "Products")
</ul>
Для того, чтобы вышеуказанное сработало, ваши представления должны распознавать ваше расширение: В Интернете.config в папке Views, добавьте <add namespace="yourNamespacehere.Helpers" />
в тег namespaces.Затем создайте свой проект, закройте и снова откройте представление, к которому вы добавляете это.
, затем, основываясь на текущем действии и контроллере, помощник добавит или нет класс active
при создании привязки.