自定义ActionLink助手,知道您所在的页面

Joh*_*oge 12 asp.net-mvc

我有一个小型的MVC站点,它使用Html.ActionLink帮助器作为导航栏.我想改变的一件事是默认的ActionLink将呈现一个到页面的html链接,即使这是当前页面.

例如,它创建一个这样的链接:

<a href="/myUrl">Some title...</a>
Run Code Online (Sandbox Code Playgroud)

即使你已经在/ myUrl.如果它会禁用该链接并且可能插入一个特殊的CSS类来显示当前访问的页面,那将是很好的,如下所示:

<a href="#" class="currentPageCSS">My Url</a>
<a href="/someOtherUrl">Some Other Url</a>
Run Code Online (Sandbox Code Playgroud)

在加载MVC站点之前一定遇到过这个问题,所以我很想知道其他人是如何处理它的.

Dar*_*rov 32

这似乎是滚动自定义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);
    }
}
Run Code Online (Sandbox Code Playgroud)

在你的视图中:

<%= Html.MyActionLink("hello foo", "Index", "Home") %>
<%= Html.MyActionLink("hello bar", "About", "Home") %>
...
Run Code Online (Sandbox Code Playgroud)

并根据你在哪里帮助将产生适当的锚.

  • 好主意!我将无耻地窃取和整合它. (3认同)