asp.net-mvc – 自定义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网站的加载之前必须遇到,所以我很想知道其他人如何处理它.

解决方法

这似乎是一个很好的场景来滚动一个自定义的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") %>
...

并且取决于您的帮助者将在哪里生成正确的锚点.

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....