ASP.NET MVC Razor中的新的空条件运算符

时间:2015-10-16 13:20:59

标签: c# asp.net-mvc razor c#-6.0

因此,自从C#6.0问世以来,我一直在使用空条件运算符。例如:

Model?.Person?.Zip

但是,我现在有一种情况,我有一个解决方案,客户在视图中的域模型上运行。虽然我会用斧头追捕开发人员,但我发现在视图中进行一些空检查会更容易。

但是,当我在Razor中使用它时:

@Model?.Person?.Zip

我的Model?被视为动态,但?打破了动态内容,其余内容呈现为文字。

你是如何解决这个问题的?

4 个答案:

答案 0 :(得分:62)

只是一个猜测

@(Model?.Person?.Zip)

答案 1 :(得分:18)

为了一些额外的完整性(我在Microsoft的ASP.NET团队工作):

正如Dieter B(以及其他一些人)正确指出的那样,@(Model?.Person?.Zip)将起作用。

@(...)语法可以被认为是"转义语法"这使得代码将被解析为表达式时具有更大的灵活性。

当构建当前版本的Razor时,只有C#5出现,因此不直接支持新的C#6语法。

ASP.NET团队希望将一些Razor v4(用于ASP.NET 5 / MVC 6)支持C#6支持回Razor v3(用于ASP.NET 4.x / MVC 5) )。

答案 2 :(得分:4)

如果您从项目中缺少以下一个或两个NuGet包,也会发生这种情况:

  • Microsoft.CodeDom.Providers.DotNetCompilerPlatform
  • Microsoft.Net.Compilers

答案 3 :(得分:1)

只需将目标框架更改为.NetFramework 4.7并使用Nuget软件包管理器安装以下软件包:

  • Microsoft.CodeDom.Providers.DotNetCompilerPlatform
  • Microsoft.Net.Compilers

然后像这样使用它(请注意括号,允许使用完整的C#语法而不是部分Razor语法):

@(Model.Country?.Name)