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

为什么我的MarkupString无法正确渲染?

Razor条件渲染HTML未正常解析问题

我编写了一行带条件判断的Razor代码:

<BSCol MD="3" Class="d-flex justify-content-center"><b>@(_bid.PriceGuarantee ? "Price Is Guaranteed" : ((MarkupString)"<div class='text-danger'>Price Is NOT Guaranteed</div>"))</b></BSCol>

但渲染结果不符合预期:未保证价格的文本没有显示为红色,反而直接输出了<div class='text-danger'>Price Is NOT Guaranteed</div>这段HTML代码,而非解析后的样式化文本。

问题原因

  1. HTML嵌套规范冲突:<b>是行内元素,按照HTML规范不能包含块级元素<div>,浏览器会自动修正这种错误嵌套,导致代码解析异常。
  2. Razor表达式解析问题:原代码中MarkupString嵌套在行内元素内部,表达式的嵌套结构导致Razor没有正确解析HTML内容,直接输出了源码。

解决方案

方案一:使用if-else分支替代三元表达式(更清晰易维护)

<BSCol MD="3" Class="d-flex justify-content-center">
    @if (_bid.PriceGuarantee)
    {
        <b>Price Is Guaranteed</b>
    }
    else
    {
        <b><span class='text-danger'>Price Is NOT Guaranteed</span></b>
    }
</BSCol>

用行内元素<span>替代<div>,避免行内元素嵌套块级元素的问题,同时代码逻辑更直观。

方案二:调整三元表达式,确保MarkupString内容合规

<BSCol MD="3" Class="d-flex justify-content-center">
    @(_bid.PriceGuarantee 
        ? (MarkupString)"<b>Price Is Guaranteed</b>" 
        : (MarkupString)"<b><span class='text-danger'>Price Is NOT Guaranteed</span></b>")
</BSCol>

将<b>标签整合到MarkupString中,同时用<span>替换<div>,保证HTML嵌套符合规范,Razor能正确解析并渲染样式。

内容的提问来源于stack exchange,提问作者Paul T. Rykiel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:15:34