我的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();
}
}
渲染后,它看起来像这样:
<a href="http://localhost:63595/project/reviewresource/99ddb0d8-238a-e511-8172-00215e466552">
http://localhost:63595/project/reviewresource/99ddb0d8-238a-e511-8172-00215e466552
</a>
我猜我做错了什么,应该很简单/很明显。
这里要小心注入攻击。话虽如此,您需要返回一个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编码字符串。