Подтвердить что ты не робот

Пользовательский помощник ActionLink, который знает, на какой странице вы находитесь

У меня есть небольшой сайт MVC, который использует помощник Html.ActionLink для навигационной панели. Одна вещь, которую я хотел бы изменить, заключается в том, что по умолчанию ActionLink будет отображать ссылку html на страницу, даже если это текущая страница.

Например, он создает ссылку вроде этого:

<a href="/myUrl">Some title...</a>

даже если вы уже включены /myUrl. Было бы неплохо, если бы он отключил эту ссылку и, возможно, ввел специальный класс CSS для отображения текущей страницы, например:

<a href="#" class="currentPageCSS">My Url</a>
<a href="/someOtherUrl">Some Other Url</a>

Эта проблема должна быть встречена ранее на загрузках сайтов MVC, поэтому мне любопытно узнать, как другие люди справились с ней.

4b9b3361

Ответ 1

Это похоже на хороший сценарий для кадрирования настраиваемого HTML-помощника. Итак, скажите:

public static class LinkExtensions
{
    public static MvcHtmlString MyActionLink(
        this HtmlHelper htmlHelper, 
        string linkText, 
        string action, 
        string controller
    )
    {
        var currentAction = htmlHelper.ViewContext.RouteData.GetRequiredString("action");
        var currentController = htmlHelper.ViewContext.RouteData.GetRequiredString("controller");
        if (action == currentAction && controller == currentController)
        {
            var anchor = new TagBuilder("a");
            anchor.Attributes["href"] = "#";
            anchor.AddCssClass("currentPageCSS");
            anchor.SetInnerText(linkText);
            return MvcHtmlString.Create(anchor.ToString());
        }
        return htmlHelper.ActionLink(linkText, action, controller);
    }
}

и внутри вашего представления:

<%= Html.MyActionLink("hello foo", "Index", "Home") %>
<%= Html.MyActionLink("hello bar", "About", "Home") %>
...

и в зависимости от того, где вы являетесь помощником, генерируется правильный якорь.