C#循环中经过HTML编辑的文本如何在页面上显示为完整格式化内容
问题原因
Razor视图引擎默认会对所有@开头的字符串输出做HTML编码,目的是防御XSS跨站脚本攻击,所以你存储的HTML标签会被转义成<、>这类转义字符,不会被浏览器识别为HTML标签渲染。
解决方案
方案1:使用Html.Raw()方法(最常用)
直接在视图中用Html.Raw()包裹要输出的内容,告诉Razor不需要对这段内容做编码,直接输出原始HTML:
@foreach (var item in Model) { <div>@Html.Raw(item.content)</div> }
方案2:后台封装为IHtmlString类型
如果你不想在视图中重复写Html.Raw(),可以在后台构造Model的时候,把content字段处理为IHtmlString类型:
// 后台构造Model示例 item.content = new HtmlString(原始HTML字符串);
视图中可以直接输出,不需要额外处理:
@foreach (var item in Model) { <div>@item.content</div> }
安全注意事项
如果content字段的内容来自用户提交的不可信输入,直接输出原始HTML会存在XSS安全风险,建议在输出前先对HTML内容做净化处理,过滤掉<script>、<iframe>、onclick等危险标签和属性,避免恶意脚本执行。
内容的提问来源于stack exchange,提问作者a. 1
相关产品推荐
相关产品推荐

