c# - 我的 HtmlHelper 正在丢失 Html 编码

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

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

我猜我做错了一些应该非常简单/显而易见的事情。

最佳答案

注意这里的注入(inject)攻击。也就是说,您需要返回一个 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 :

Represents an HTML-encoded string that should not be encoded again.

关于c# - 我的 HtmlHelper 正在丢失 Html 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33763026/

相关文章:

c# - Google ML-Engine Predict from C# 身份验证问题

c# - 在Google Play商店中提交 “500 No individual errors”的原因

c# - 如何从 MVC Controller 打开新窗口?

c# - MVC - 根据用户的权限禁用大约一半的字段

html - 我的导航栏在 FF 中的位置不正确

jquery - MVC + jQuery : how to create an input text through Html. TextBox() 并指定 "class"属性

c# - ASP.NET 中的大 ViewState 值

c# - 无法创建静态类的实例 'System.Tuple'

asp.net-mvc - Angular ng-include cshtml 页面

javascript - 使用 Angular 和 MVC 实现多个级联下拉菜单