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

.NET Core Razor页面字符串插值编译异常问题咨询

Razor页面中插值字符串含引号编译失败问题

以下Razor(.cshtml)代码无法编译:

@($"{\"\\\"\"}") // <-- 无法运行

@($"{\"'\"}") // <-- 无法运行

@($"{\"a\"}") // <-- 可运行

报错信息如下:

RZ1000: 未终止的字符串文本。以引号(")开头的字符串必须在行尾前终止。不过,以@和引号(@"")开头的字符串可以跨多行。
CS1002: 应输入 ;
CS1513: 应输入 }

观察发现,插值内容为非引号字符时可正常运行,但即使引号已转义,插值双引号或单引号会导致Razor解析失败。但相同逻辑的代码在普通.cs文件中可正常编译运行:

public sealed class Test
{
    public string x = $"{\"\\\"\"}";
    public string y = $"{\"'\"}";
    public string z = $"{\"a\"}";
}

环境信息:

  • .NET SDK: v7.0.102
  • .NET Runtime: v7.0.2
  • C#: v11 (预览版)
  • Visual Studio Community 2022 (64位): v17.4.4

问题原因与解决方案

这是因为Razor解析器的优先级和普通C#代码不同:Razor会先识别视图中的HTML/模板语法,再处理C#代码。当你在插值字符串里嵌套转义引号时,Razor解析器会提前将\"识别为模板中的双引号终止符,而非C#的转义字符,导致字符串被错误截断,引发未终止字符串的报错。

解决方法:

  1. 混合使用单双引号区分层级:
    利用Razor对单/双引号的识别差异,避免转义冲突:
    @($'{\"\"}') // 输出双引号
    @($"{'\''}") // 输出单引号
    
  2. 使用字符字面量替代嵌套字符串:
    直接插入字符而非嵌套字符串,减少转义层级:
    @($"{'"'}") // 输出双引号
    @(${"'"}")  // 输出单引号
    
  3. 提前定义变量再引用:
    在代码块中先处理好带引号的字符串,再在视图中使用,彻底避免解析冲突:
    @{
        var quote = $"{\"\\\"\"}";
    }
    @quote
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:15:24