Razor 视图中的字符串插值

本文关键字:字符串 插值 视图 Razor | 更新日期: 2023-09-27 17:56:14

这是否受支持?

如果是这样,是否有一些技巧可以启用它?我假设 Razor 没有使用足够新的编译器...? VS2015 IDE似乎很好,但是在运行时我得到了

CS1056:意外字符"$"

Razor 视图中的字符串插值

更新

从 Visual Studio 2015 Update 1 开始,GUI 中有一个简单的过程来为你执行以下步骤。只需右键单击您的 Web 项目并选择"启用 C# 6/VB 14"。有关详细信息,请参阅 MSDN 博客文章"启用 C# 6/VB 14 的新功能"。

自编写此答案以来,已在 NuGet 包的帮助下添加了此功能。

如果使用的是 MVC5,请将此 Nuget 包添加到解决方案中。

https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/

nuget 包应修改 web.config,但请检查以下配置是否在 web.config 文件中(如果未添加):

  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE='&quot;Web'&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>

在 MVC6 中,这是内置的。

<小时 />

原答案:

<div>
    @($"Hello {this.Model.SomeProperty}")
</div>

这仅适用于带有 MVC6 的 C# 6。即使使用 C# 6 编译器运行 MVC5,它也无法正常工作。

诀窍是 razor 解析器还不够智能,无法识别某些语法,因此您必须将整个内容括在括号中(在 razor 视图中使用 null 条件运算符 ( ?. ) 时也必须执行此操作)。

也就是说,Razor 中的字符串插值目前在 MVC6 中有点问题,所以如果它有一些问题,我不会感到惊讶。 它们是否会得到解决是另一回事。

  1. 包管理器控制台运行以下命令,将所需的CodeDom提供程序添加到项目中。它将自动修改您的web.config文件,以向其添加CodeDom所需的设置。

    Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

  2. 重新启动Visual Studio

注意:正如@Jake在此答案下的评论中提到的,如果您已经拥有DotNetCompilerPlatform包,则可能只需要更新。

如果你想做:

<div>
    @($"Hello {this.Model.SomeProperty}")
</div>

简单地说,你可以做到:

<div>
    "Hello @this.Model.SomeProperty"
</div>

这与 MVC5 一起工作