【问题标题】:My HtmlHelper is losing Html Encoding我的 HtmlHelper 正在丢失 Html 编码
【发布时间】:2015-11-17 17:12:29
【问题描述】:

我正在尝试在我的视图中使用自定义 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;

我猜我做错了应该很简单/很明显的事情。

【问题讨论】:

  • 你有没有试过@Html.Raw()在你看来?

标签: c# asp.net-mvc html-helper


【解决方案1】:

注意注入攻击。话虽如此,您需要返回一个 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());
  }
}

HtmlString 派生自 IHtmlString

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

【讨论】:

    猜你喜欢
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    相关资源
    最近更新 更多