You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MVC中从模型/控制器传HTML字符串到视图 如何无需JS直接解析为DOM元素

MVC视图渲染HTML格式属性的解决方案

问题原因

  • 最初的写法使用<%:语法+Html.DisplayFor,二者默认都会对输出内容做HTML编码,会把<、>等标签符号转义为HTML实体,所以只能显示HTML源码,不会渲染成DOM元素。
  • 尝试的写法把方法调用HttpUtility.HtmlEncode放在DisplayFor的表达式参数里,违反了DisplayFor的用法限制:它的Lambda表达式只能直接指向模型的字段/属性,不能包含方法调用、运算等逻辑,所以抛出了对应的异常。另外需求是不编码HTML,这里调用HtmlEncode完全是反向操作。

解决方案

方案1:直接使用Html.Raw输出(最简便)

Html.Raw方法会直接返回原始HTML内容,不会做编码处理,直接替换原有代码即可:

<td style="max-width: 600px">
    <%: Html.Raw(item.description) %>
</td>

方案2:给属性加注解复用DisplayFor

如果要保留DisplayFor的写法,你可以在模型类的description属性上添加DataType注解,标记该属性为HTML格式:

[DataType(DataType.Html)]
public string description { get; set; }

加完注解后,最初的Html.DisplayFor写法就可以正常渲染HTML内容,不需要修改视图代码:

<td style="max-width: 600px">
    <%: Html.DisplayFor(modelItem => item.description) %>
</td>

安全提醒

直接渲染原始HTML存在XSS跨站脚本攻击风险,请务必确保description属性的HTML来源完全可信,或者在入库、输出前对恶意脚本内容做过滤处理。

内容的提问来源于stack exchange,提问作者Sara N

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 20:15:08