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

Blazor中强制转换为MarkupString仍出现HTML字符串编码问题

Blazor中MarkupString未按预期渲染HTML的问题

问题复现

  • 编写Blazor组件代码如下:
<small class="help-text editable-label" @ref="HelpText">
    @(!string.IsNullOrWhiteSpace(Model.HelpText) ? (MarkupString)Model.HelpText : "Double-click here to add text")
</small>
  • 测试时给Model.HelpText字段赋值为:
"<b><i>This is a test</b></i>"
  • 实际运行效果:页面直接展示包含HTML标签的原始字符串,没有渲染出预期的加粗斜体格式。

故障原因

C#三元表达式要求两个分支的返回类型可以隐式统一,当前代码中一个分支返回MarkupString类型,另一个分支返回普通string类型,编译器会自动将两个分支的返回值统一隐式转换为string类型,等于之前对Model.HelpText的MarkupString强转失效。Blazor对普通字符串会默认做HTML编码处理,最终就会把HTML标签作为纯文本展示。

修复方案

将三元表达式的两个分支都显式转换为MarkupString类型,保证表达式最终返回值是MarkupString,Blazor就会按原生HTML渲染内容,修正后代码如下:

<small class="help-text editable-label" @ref="HelpText">
    @(!string.IsNullOrWhiteSpace(Model.HelpText) ? (MarkupString)Model.HelpText : (MarkupString)"Double-click here to add text")
</small>

注意:MarkupString会跳过Blazor的HTML编码逻辑,如果渲染的内容来自用户输入,必须先做XSS风险过滤,避免恶意脚本注入。

内容的提问来源于stack exchange,提问作者Rob Simmermon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:51:23