Лучший способ пометить «текущий» элемент навигации в меню
Например, здесь, в StackOverflow, вы можете выбрать главное меню с параметрами:Вопросов, Теги, пользователей, Значки, оставшийся без ответа а такжеЗадавать вопрос, Когда вы находитесь в одном из этих разделов, он выделяется оранжевым цветом.
Каков наилучший способ добиться этого в ASP.NET MVC?
Пока и в качестве доказательства концепции я сделал этого помощника:
public static String IsCurrentUrl(this UrlHelper url, String generatedUrl, String output)
{
var requestedUrl = url.RequestContext.HttpContext.Request.Url;
if (generatedUrl.EndsWith("/") && !requestedUrl.AbsolutePath.EndsWith("/"))
generatedUrl=generatedUrl.Substring(0, generatedUrl.Length - 1);
if (requestedUrl.AbsolutePath.EndsWith(generatedUrl))
return output;
return String.Empty;
}
Этот метод добавляет строку вывода к элементу, если текущий запрос соответствует этой ссылке. Так что это можно использовать так:
<li>
<a href="@Url.Action("AboutUs","Home")" @Url.IsCurrentUrl(@Url.Action("AboutUs", "Home"), "class=on")><span class="bullet">About Us</span></a>
</li>
Первая проблема, я в основном звоню дваждыUrl.Action
сначала для атрибута "href", а затем во вспомогательном, и я думаю, что должен быть лучший способ сделать это. Вторая проблема, это не лучший способ сравнить две ссылки. Я думаю, что я мог бы создать новыйHtml.ActionLink
перегрузка, поэтому мне не нужно называтьUrl.Action
дважды, но есть ли встроенный способ сделать это?
Бонус: если я добавлю"class=\"on\""
, MVC оказываетclass=""on""
, Почему?
С уважением.