То, что я сделал, было так:
Я создал свой собственный помощник RenderMenuLink, поэтому вместо вызова
<li><%= Html.ActionLink("Home", "index", "home")%></li>
Я призываю
<%= Html.RenderMenuLink("Home", "index", "home")%>
, который в свою очередь добавляет ссылку, и в случае пользователь посещает эту ссылку [1] «выбранный» класс добавляется к атрибуту «класса» элемента списка.
[1]: я достигаю этой функциональности, проверяя, совпадает ли URL-адрес пользователя с URL-адресом, созданным по этой ссылке. Код вставлен ниже:
public static class HtmlMenu
{
public static string RenderMenuLink(this HtmlHelper html, string title, string action, string controller)
{
UrlHelper url = new UrlHelper(html.ViewContext.RequestContext);
string link = url.Action(action, controller);
if(String.IsNullOrEmpty(link))
{
throw new ArgumentException("No appropriate route found!");
}
var cssClass = String.Empty;
var uriPath = html.ViewContext.RequestContext.HttpContext.Request.Url.AbsolutePath;
if((link != "/" && uriPath.StartsWith(link)) || (uriPath == link))
{
cssClass = "selected";
}
return String.Format("<li class=\"{0}\"><a href=\"{1}\">{2}</a></li>", cssClass, link, title);
}
}