代码之家  ›  专栏  ›  技术社区  ›  Ahmed

是否禁用当前URL的链接?

  •  0
  • Ahmed  · 技术社区  · 15 年前

    好的,我觉得这很容易!
    我有一个viewmasterpage,上面有一些链接(home/about/login/etc)。我要实现的只是在链接的引用URL已经打开时禁用链接(即,如果当前的URL是/register,那么应该禁用register链接)。哈哈!?)
    由于我不喜欢在视图中编写大量的内嵌编码,所以我最终使用一些扩展方法(只是为了将代码保存在.cs文件中)扩展了htmlhelper,在我的视图中,我调用了这些方法,下面是我的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();
        }
    

    尽管这项措施奏效,但仍然存在两个问题:

    1. URL的硬编码字符串值(特别是在我比较absluteuri与“”时用于主链接) http://www.mysite.com/ “”

    2. 我的编程本能不喜欢它,我觉得它应该比这简单得多。

    任何想法!


    附言:不允许使用javascript!它是该应用程序的无javascript版本。

    1 回复  |  直到 15 年前
        1
  •  1
  •   David Glenn    15 年前

    我不认为这有太多的错误,很明显,看看它能做什么,它能起作用。不过,最好是让它更易于重用,因为我可以想象您可以用其他链接重复一下自己。可能是这样的:

    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"}) %>
    

    如果您想离开硬编码域,请使用 请求.url.absolutePath 而不是 阿贝特鲁里 如上所述。

    另一种选择是从控制器解析模型中的当前页面信息,可能类似于 viewdata.model.currentpage=“注册”; 但我不建议你这么做,因为我不认为这是控制者的工作。