我的HtmlHelper正在丢失Html编码

本文关键字:Html 编码 HtmlHelper 我的 | 更新日期: 2023-09-27 18:22:13

我正试图在视图中使用自定义HtmlHelper来显示链接,但它正在进行HTML编码。

在我看来,我这样称呼我的助手:

<td>
    @Html.Urls(item.TaskUrl)
</td>

我的助手是这样的:

public static class MkpHelpers
{
    public static string Urls(this HtmlHelper helper, string value)
    {
        var items = value.Split(';'); // use your delimiter
        var sb = new StringBuilder();
        foreach (var i in items)
        {
            var linkBuilder = new TagBuilder("a");
            linkBuilder.MergeAttribute("href",i);
            linkBuilder.InnerHtml = i;
            sb.Append(linkBuilder.ToString());
        }
        return sb.ToString();
    }
}

渲染后,它看起来像这样:

&lt;a href="http://localhost:63595/project/reviewresource/99ddb0d8-238a-e511-8172-00215e466552"&gt;
    http://localhost:63595/project/reviewresource/99ddb0d8-238a-e511-8172-00215e466552
&lt;/a&gt;

我猜我做错了什么,应该很简单/很明显。

我的HtmlHelper正在丢失Html编码

这里要小心注入攻击。话虽如此,您需要返回一个HtmlString:

public static class MkpHelpers
{
  public static HtmlString Urls(this HtmlHelper helper, string value)
  {
    var items = value.Split(';'); // use your delimiter
    var sb = new StringBuilder();
    foreach (var i in items)
    {
        var linkBuilder = new TagBuilder("a");
        linkBuilder.MergeAttribute("href",i);
        linkBuilder.InnerHtml = i;
        sb.Append(linkBuilder.ToString());
    }
    return new HtmlString(sb.ToString());
  }
}

IHtmlString:中的HtmlString Derives

表示不应再次编码的HTML编码字符串。