在Razor视图中进行字符串插值?


93

是否支持?

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

CS1056:意外字符“ $”


您能显示您正在谈论的代码吗?
Jeroen Vannevel

您正在使用哪个ASP.NET(ASP.NET 5:基于.NET Core的新版本;或ASP.NET 4的更新)?
理查德(Richard)

6
这个主题如何?!?!?!荒谬。
Josh M.

1
谢谢!我很高兴有人这么说。我认为这非常有帮助,而且我个人认识2个使用相同解决方案存在相同问题的人。无论如何,这到底是谁负责?
蒂姆·施密特

@TimSchmidt关闭队列很长,因此有时问题会被不适当地关闭。但是重新打开队列很短,因此,如果真的应该重新打开它,它将很快。
o11c 2015年

Answers:


124

更新

从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,它也不起作用。

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

就是说,在MVC6中,Razor中字符串插值目前有点bug,因此如果出现一些问题,我也不会感到惊讶。是否解决这些问题是另一回事。


啊,宾果游戏,我正在使用MVC5。谢谢!
蒂姆·施密特

5
MVC 5.2.3确实可以工作,您只需要为asp.net添加rosyln代码dom包。请在非公开问题中查看此答案:stackoverflow.com/a/31548221/637783
jbtule

1
用vs更新错误,现在我说,C#6,不支持,这是更好的方式
CMS

1
即使在安装此NuGet软件包后也更新了Web.Config,我仍然收到以下错误消息作为工具提示:“ C#5中没有功能'null propagating operator'。请使用语言版本6或更高版本。”
超级编码器

1
我的右键菜单上没有“启用C#6 / VB 14”选项。但是我在Visual Studio的“项目”菜单中找到了它,所以我从那里启用了它。谢谢。
HasanG

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

    Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

  2. 重新开始 Visual Studio

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


今天,这是正确的解决方案。从Microsoft的描述: Replacement CodeDOM providers that use the new .NET Compiler Platform ("Roslyn") compiler as a service APIs. This provides support for new language features in systems using CodeDOM (e.g. ASP.NET runtime compilation) as well as improving the compilation performance of these systems.
Luis Ferrao

1
对于我的情况,我已经有此软件包,但是它是1.0.5版。更新到1.0.8解决了该问题。
杰克

对我而言,无需重新启动Visual Studio。
Johnathan Barclay

@JohnathanBarclay在我的情况下,重新启动是必要的。我认为可以肯定地认为某些人有此必要。
Loudenvier
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.