我正尝试在我的 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();
}
}
渲染出来,看起来是这样的:
<a href="http://localhost:63595/project/reviewresource/99ddb0d8-238a-e511-8172-00215e466552">
http://localhost:63595/project/reviewresource/99ddb0d8-238a-e511-8172-00215e466552
</a>
我猜我做错了一些应该非常简单/显而易见的事情。
最佳答案
注意这里的注入(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());
}
}
Represents an HTML-encoded string that should not be encoded again.
关于c# - 我的 HtmlHelper 正在丢失 Html 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33763026/