Razor视图中的字符串插值?

Tim*_*idt 89 c# asp.net-mvc razor c#-6.0

这支持吗?

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

CS1056:意外字符'$'

vcs*_*nes 118

更新:

从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>
Run Code Online (Sandbox Code Playgroud)

在MVC6中,这是内置的.


原始答案:

<div>
    @($"Hello {this.Model.SomeProperty}")
</div>
Run Code Online (Sandbox Code Playgroud)

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

诀窍是剃刀解析器还不够聪明,无法识别某些语法,因此必须将整个事物包装在括号中(?.在剃刀视图中使用空条件运算符()时也必须这样做).

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

  • MVC 5.2.3确实有效,你只需要为asp.net添加rosyln代码dom包.请在非封闭式问题中查看此答案:http://stackoverflow.com/a/31548221/637783 (5认同)
  • 即使安装了同样更新了 Web.Config 的 NuGet 包,我仍然收到以下错误消息作为工具提示:“功能‘空传播运算符’在 C# 5 中不可用。请使用语言版本 6 或更高版本。” (2认同)

RAM*_*RAM 12

  1. 在您的程序中运行以下命令以Package Manager Console向项目添加所需的CodeDom提供程序.它还会web.config自动修改您的文件以向其添加CodeDom需要的设置.

    Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform


  1. 重新启动Visual Studio

注意:正如@Jake在他的评论中提到的那样,如果您已经有了DotNetCompilerPlatform包,那么请尝试更新它.