Blazor中是否有Html.Raw的等效方法?如何无编码渲染字符串HTML?
在Blazor/Razor视图中渲染未编码的HTML内容
嘿,这个问题我太熟了!Blazor/Razor视图默认会自动编码所有输出的字符串,目的是防止XSS攻击,但如果是你信任的HTML内容,想要直接渲染不编码的话,用下面两种方法就搞定:
使用
MarkupString类型包装内容
这是Blazor官方推荐的方式,专门用来标记无需编码的HTML内容。你只需要把存储HTML的字符串转换成MarkupString实例,直接在视图里引用即可:@page "/render-raw-html" <div class="container"> @{ // 假设这是你存储在字符串里的HTML内容 string storedHtml = "<h4 style='color: #2c3e50;'>这是一段带样式的HTML</h4><p>包含<strong>加粗</strong>和<em>斜体</em>文本</p>"; // 转换成MarkupString,告诉Blazor不要编码 MarkupString renderableHtml = new MarkupString(storedHtml); } <!-- 直接渲染原始HTML --> @renderableHtml </div>内联强制转换(适合简单场景)
如果不想单独声明变量,也可以直接在视图里把字符串强制转换成MarkupString,代码更简洁:@page "/inline-raw-html" <p>@((MarkupString)"<span class='badge bg-primary'>内联渲染的HTML标签</span>")</p>
⚠️ 必须重视的安全提醒
Blazor默认的自动编码是为了防范XSS注入攻击!只有当你完全信任HTML内容的来源(比如自己生成的静态内容)时,才使用上面的方法。如果内容来自用户输入(比如评论、表单提交的内容),一定要先对内容进行严格的XSS过滤,确保没有恶意脚本后再渲染。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

