Razor视图中基于条件插入HTML无法正常渲染该如何处理?
问题原因
Razor默认会对动态输出的字符串内容做HTML编码,你直接在三元表达式的返回分支写HTML标签时,Razor会把它当成普通字符串处理,尖括号等特殊字符会被转义为实体编码,自然不会被解析为正常的UI元素。
可用解决方案
方法1:适配原有三元表达式写法,用Html.Raw()包裹HTML内容
Html.Raw()的作用是告诉Razor不需要对这段内容做编码,直接输出原始HTML:
@(item.ID == 0 ? "" : Html.Raw("<i class='fas fa-bus'></i>"))
方法2:改用Razor原生条件判断语法(可读性更高)
如果不需要强行用三元表达式,直接写if判断的写法更直观,也不需要额外处理HTML:
@if (item.ID != 0) { <i class="fas fa-bus"></i> }
注意事项
如果HTML内容是用户可自定义的,使用Html.Raw()有XSS注入风险,需要自行做好内容校验。如果是固定的业务代码片段,两种写法都可以正常使用。
内容的提问来源于stack exchange,提问作者GettingStarted
相关产品推荐
相关产品推荐

