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

ASP.NET MVC中动态生成含空格JavaScript类名失败求助

解决ASP.NET MVC中动态生成带空格类名的问题

嘿,我懂你遇到的糟心事了——本来想给第一个轮播项加上active类,结果渲染出来变成了两个独立的属性,这确实挺闹心的。

问题根源

你之所以会得到<script class="carousel-item" active="">这种结果,是因为Razor视图在解析未加引号的表达式时,会把字符串里的空格当成HTML属性的分隔符。如果你的className变量值是"carousel-item active",但你写的是<script class=@className>,Razor就会把空格后的active当成一个新的空属性来渲染。

解决方案

方案1:给类名表达式加上双引号

最简单的修复方式,就是把@className放在双引号里,让Razor把整个字符串解析成一个完整的class属性值:

@for (var i = 0; i < Model.Banners.Count; i++)
{
    var className = "carousel-item";
    if (i == 0)
    {
        className += " active"; // 这里的空格是正确的
    }
    var srcName = "";
    if (Model.Banners[i].Image != null)
    {
        srcName = "data:image;base64," + System.Convert.ToBase64String(Model.Banners[i].Image);
    }

    // 关键:给@className加上双引号
    <script class="@className">
        // 你的脚本内容
    </script>
}

这样渲染出来的HTML就会是你预期的<script class="carousel-item active">。

方案2:直接在class属性内用条件表达式(更简洁)

如果你不想单独声明className变量,也可以直接在class属性里用三元运算符动态拼接类名,代码更紧凑:

@for (var i = 0; i < Model.Banners.Count; i++)
{
    var srcName = "";
    if (Model.Banners[i].Image != null)
    {
        srcName = "data:image;base64," + System.Convert.ToBase64String(Model.Banners[i].Image);
    }

    <script class="carousel-item @(i == 0 ? "active" : "")">
        // 你的脚本内容
    </script>
}

这里@(i == 0 ? "active" : "")会在i=0时输出active,否则输出空字符串,同样能得到正确的带空格的类名。

小提示

在Razor视图里写HTML属性时,尽量养成给动态值加双引号的习惯,这样能避免很多类似的解析错误,尤其是当值里包含空格、特殊字符的时候。

内容的提问来源于stack exchange,提问作者Maya Song

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:14:29