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

将类应用于某些链接文本

  •  0
  • yoozer8  · 技术社区  · 13 年前

    我们最近添加了一个扩展方法( string.Highlight(string target) )用包装目标文本的出现 <span class="highlighted"></span> ,并且正在将其用于页面上显示的所有文本。

    我们遇到的最初问题是,文本不是用标签包装的,而是用明文包装的 "<span clas..." 。除了链接中的文本外,我们已设法解决了此问题。

    <%= Html.ActionLink(linkText.Highlight(word), action) %>
    

    这粘贴了文本 "<span class..." 进入链接,这不是我们想要的。有没有办法将突出显示类应用于链接中的一些文本,或者我们应该忘记它?


    扩展方法:

    public static string Highlight(this string text, this string target)
    {
        return text.Replace(target, @"<span class=""highlighted"">" + target + "</span>";
    }
    
    2 回复  |  直到 13 年前
        1
  •  1
  •   Darin Dimitrov    13 年前

    您可以编写一个自定义ActionLink扩展方法,该方法不会像标准助手那样对文本进行HTML编码:

    public static MvcHtmlString UnencodedActionLink(
        this HtmlHelper htmlHelper,
        string linkText,
        string actionName
    )
    {
        var str = UrlHelper.GenerateUrl(null, actionName, null, null, null, null, new RouteValueDictionary(), htmlHelper.RouteCollection, htmlHelper.ViewContext.RequestContext, true);
        var a = new TagBuilder("a")
        {
            InnerHtml = !string.IsNullOrEmpty(linkText) ? linkText : string.Empty
        };
        a.MergeAttribute("href", str);
        return MvcHtmlString.Create(a.ToString(TagRenderMode.Normal));
    }
    

    然后:

    <%= Html.UnencodedActionLink(linkText.Highlight(word), action) %>
    

    甚至更好:

    public static MvcHtmlString HighlightedActionLink(
        this HtmlHelper htmlHelper,
        string linkText,
        string word,
        string actionName
    )
    {
        var str = UrlHelper.GenerateUrl(null, actionName, null, null, null, null, new RouteValueDictionary(), htmlHelper.RouteCollection, htmlHelper.ViewContext.RequestContext, true);
        var a = new TagBuilder("a")
        {
            InnerHtml = !string.IsNullOrEmpty(linkText) ? linkText.Highlight(word) : string.Empty
        };
        a.MergeAttribute("href", str);
        return MvcHtmlString.Create(a.ToString(TagRenderMode.Normal));
    }
    

    然后:

    <%= Html.HighlightedActionLink(linkText, word, action) %>
    
        2
  •  1
  •   David    13 年前

    ActionLink (我想 Html helper方法)出于明显的安全原因(默认情况下防止XSS漏洞),HTML对文本进行编码。

    如果你只需要应用一个CSS类,你可以直接在 操作链接 以下为:

    <%= Html.ActionLink(word, action, null, new { @class = "highlighted" })%>
    

    当然,这将适用于 class a 而不是使用 span 。但是你为什么需要 跨度 内部 首先,当 也可以持有类属性?