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

时间:2011-02-22 22:13:01

标签: asp.net-mvc

我有一个小型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网站之前一定遇到过这个问题,所以我很想知道其他人是如何处理它的。

1 个答案:

答案 0 :(得分: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);
    }
}

并在您的视图中:

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

并且根据你的位置,助手将生成适当的锚点。

相关问题