Asp.net mvc 是否禁用当前url的链接?

Asp.net mvc 是否禁用当前url的链接?,asp.net-mvc,Asp.net Mvc,好的,我想这很容易 我有一个ViewMasterPage,上面有一些链接(Home/About/Login/etc)。我想要实现的是,当链接的引用url已经打开时,将其禁用(即,如果当前url为/Register,则应禁用注册链接..轻松哈!?) 由于我不喜欢在视图中编写大量的内联代码,我最终使用一些扩展方法(只是为了将代码保存在.cs文件中)扩展了HtmlHelper,在我的视图中,我称这些方法为register方法,以下是我的register方法作为示例: public static st

好的,我想这很容易
我有一个ViewMasterPage,上面有一些链接(Home/About/Login/etc)。我想要实现的是,当链接的引用url已经打开时,将其禁用(即,如果当前url为/Register,则应禁用注册链接..轻松哈!?)
由于我不喜欢在视图中编写大量的内联代码,我最终使用一些扩展方法(只是为了将代码保存在.cs文件中)扩展了HtmlHelper,在我的视图中,我称这些方法为register方法,以下是我的register方法作为示例:

 public static string Register (this HtmlHelper html)
    {
        TagBuilder builder ;
        if (HttpContext.Current.Request.Url.AbsoluteUri.ToUpperInvariant().Contains(MainLinks.Register.ToUpperInvariant()))
            return MainLinks.Register; // will return the string "Register"

        builder = new TagBuilder("a");
        builder.InnerHtml = MainLinks.Register;
        builder.AddCssClass("register");
        builder.Attributes.Add("href", "/register/");
        return builder.ToString();
    }
尽管这样做有效,但仍然存在两个问题:

  • URL的硬编码字符串值(特别是在我将AbslouteUri与“”进行比较时用于home链接)

  • 我的编程本能不喜欢它,我觉得应该简单得多

  • 任何想法



    Ps:不允许使用javascipt!它是该应用程序的无javascript版本

    我不认为这有什么错,很清楚它的作用和效果。不过,可能最好是让它更易于重用,因为我可以想象您在其他链接中重复自己的操作。可能是这样的:

    public static string RenderLink(this HtmlHelper html, string text, string url, object htmlAttr) {
      if (!HttpContext.Current.Request.Url.AbsolutePath.StartsWith(url, StringComparison.InvariantCultureIgnoreCase)) {
        return text;  //comparison excludes the domain
      }
      TagBuilder tag = new TagBuilder("a");
      tag.SetInnerText(text);
      tag.Attributes.Add("href", url);
      //... add attributes parsed as htmlAttr here
      return tag.ToString();
    }
    
    然后将链接添加到视图中,如:

    <%= Html.RenderLink("Register", "/register/", new { @class="register"}) %>
    <%= Html.RenderLink("Account", "/account/", new { @class="account"}) %>
    
    
    
    如果您想摆脱硬编码域,那么使用Request.Url.AbsolutePath而不是上面提到的AbsoluteUri可以实现这一点


    另一种方法是从控制器解析模型中的当前页面信息,可能类似于ViewData.model.CurrentPage=“Register”;,但我不建议您这样做,因为我不认为在这种情况下这是控制器的工作。

    谢谢DaveG!我会尽量保持干燥!我会在这里再等一段时间,也许有人会提出一个更简单的想法!再次感谢。哦,我差点忘了提这件事+1 :)