Например, здесь, в 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""
. Почему?
С уважением.