0

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

我们遇到的最初问题是,文本不是被包裹在标签中,而是被包裹在 plaintext 中"<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>";
}
4

2 回答 2

1

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

如果你需要做的只是应用一个 CSS 类,你可以直接在ActionLink

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

当然,这将应用于classa不是使用 a span。但是,当 an也可以包含类属性时,为什么你首先需要一个spaninside呢?aa

于 2012-08-13T17:06:39.973 回答
1

您可以编写一个自定义的 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) %>
于 2012-08-13T17:22:26.660 回答