Razor 视图中的字符串插值?
String interpolation in a Razor view?
支持吗?
如果是这样,是否有一些启用它的技巧?我假设 Razor 没有使用足够新的编译器......? VS2015 IDE 似乎没问题,但在运行时我得到
CS1056: Unexpected character '$'
更新:
从 Visual Studio 2015 Update 1 开始,GUI 中有一个简单的过程可以为您执行以下步骤。只需右键单击您的 Web 项目,然后 select "Enable C# 6 / VB 14"。有关详细信息,请访问 MSDN 博客 post、“New feature to enable 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=\"Web\" /optionInfer+"/>
</compilers>
</system.codedom>
在 MVC6 中,这是内置的。
原回答:
<div>
@($"Hello {this.Model.SomeProperty}")
</div>
这仅适用于带有 MVC6 的 C# 6。即使你是 运行 MVC5 和 C# 6 编译器,它也不会工作。
诀窍在于 razor 解析器还不够智能,无法识别某些语法,因此您必须将整个内容括在括号中(使用 null 条件运算符时必须这样做 (?.
)在您的剃刀视图中也是如此)。
也就是说,Razor 中的字符串插值目前在 MVC6 中是 a bit buggy,所以如果它有一些问题我不会感到惊讶。他们是否会得到解决是另一回事。
运行在Package Manager Console下面的命令添加一个需要的CodeDom
提供给你的项目。它将自动修改您的 web.config
文件以向其添加 CodeDom
所需的设置。
Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
重启 Visual Studio
注意: 正如 @Jake 在他的评论中提到的,如果你已经有了 DotNetCompilerPlatform
包可能只是需要更新。
支持吗?
如果是这样,是否有一些启用它的技巧?我假设 Razor 没有使用足够新的编译器......? VS2015 IDE 似乎没问题,但在运行时我得到
CS1056: Unexpected character '$'
更新:
从 Visual Studio 2015 Update 1 开始,GUI 中有一个简单的过程可以为您执行以下步骤。只需右键单击您的 Web 项目,然后 select "Enable C# 6 / VB 14"。有关详细信息,请访问 MSDN 博客 post、“New feature to enable 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=\"Web\" /optionInfer+"/>
</compilers>
</system.codedom>
在 MVC6 中,这是内置的。
原回答:
<div>
@($"Hello {this.Model.SomeProperty}")
</div>
这仅适用于带有 MVC6 的 C# 6。即使你是 运行 MVC5 和 C# 6 编译器,它也不会工作。
诀窍在于 razor 解析器还不够智能,无法识别某些语法,因此您必须将整个内容括在括号中(使用 null 条件运算符时必须这样做 (?.
)在您的剃刀视图中也是如此)。
也就是说,Razor 中的字符串插值目前在 MVC6 中是 a bit buggy,所以如果它有一些问题我不会感到惊讶。他们是否会得到解决是另一回事。
运行在Package Manager Console下面的命令添加一个需要的
CodeDom
提供给你的项目。它将自动修改您的web.config
文件以向其添加CodeDom
所需的设置。Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
重启
Visual Studio
注意: 正如 @Jake 在他的评论中提到的,如果你已经有了 DotNetCompilerPlatform
包可能只是需要更新。