Razor 视图中的字符串插值?

这是支持的吗?

如果是这样,是否存在启用它的技巧?我猜 Razor 没有使用足够新的编译器吧?VS2015 IDE 似乎对此没有问题,但是在运行时,我得到了

CS1056: 意想不到的字符“ $”

46872 次浏览

Update:

Starting in Visual Studio 2015 Update 1, there is a simple process in the GUI to do the steps below for you. Simply right-click your web project and select "Enable C# 6 / VB 14". More information is available on the MSDN blog post, "New feature to enable C# 6 / VB 14".

Since this answer was written, this functionality has been added with the assistance of a NuGet package.

Add this Nuget package to your solution if you are using MVC5.

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

The nuget package should modify your web.config, but check that the following configuration is in your web.config file (and if it isn't add it in):

  <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>

In MVC6, this is built-in.


Original answer:

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

This only works in C# 6 with MVC6. Even if you are running MVC5 with the C# 6 compiler, it won't work.

The trick is that the razor parser is not smart enough to recognize some syntaxes yet, so you must wrap the whole thing in parentheses (you must do this when using the null-conditional operator (?.) in your razor views as well).

That said, string interpolation in Razor is a bit buggy at the moment in MVC6, so I wouldn't be surprised if there were some issues with it. whether or not they will be addressed is another matter.

  1. Run the following command in the Package Manager Console to add a required CodeDom provider to your project. It will modify your web.config file automatically to add CodeDom required settings to it.

    Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

  2. Restart Visual Studio

Note: As @Jake mentioned in his comment under this answer, if you have the DotNetCompilerPlatform package already it may just need to be updated.

If you want to do:

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

Simply you can do:

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

This work with MVC5