如何在MVC 5的HTML Helper中输出未编码的HTML内容?
解决Razor Helper中HTML内容被自动编码的问题
这个问题我之前也踩过坑——Razor出于安全防护的默认机制,会对所有字符串输出做HTML编码,所以你传入的<strong>标签才会被转成<strong>这类转义字符。要解决这个问题,有两种实用的方案:
方法一:在Helper内部用Html.Raw()跳过编码
直接修改App_Code目录下的SSLhelpers.cshtml,把需要保留原始HTML的参数用Html.Raw()包裹,告诉Razor不要对这段内容进行编码:
@helper Macro(string Htext, string Ptext) { <h2>@Htext</h2> <p>@Html.Raw(Ptext)</p> }
修改后再调用Helper,生成的HTML里<strong>标签就能正常渲染,不会被转义了。
方法二:调用Helper时传入IHtmlString类型内容
要是不想改动Helper的代码,也可以在调用时,把带HTML的内容通过Html.Raw()转换成IHtmlString类型(因为你的Helper参数是string,所以需要转成字符串传递):
@SSLhelpers.Macro( "This is my header", Html.Raw("This is my paragraph text. We should be <strong>bold</strong> here but we're not.").ToString() )
关键安全提醒
务必注意:只有当你完全信任要输出的HTML内容时(比如是你自己编写的固定内容,而非用户输入的内容),才能使用Html.Raw()。如果内容来自用户输入,直接跳过编码会引发XSS攻击风险,这种场景建议先对用户输入做严格的过滤处理。
内容的提问来源于stack exchange,提问作者user2250708
相关产品推荐
相关产品推荐

