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

The new null-conditional operator in ASP.NET MVC Razor

所以自从 C# 6.0 出来后,我就经常使用 null 条件运算符。示例:

Model?.Person?.Zip

但是,我现在有一个解决方案,其中客户在视图中对域模型进行操作。虽然我会用斧头追捕开发人员,但我发现在视图中做一些空检查更容易。

然而,当我在 Razor 中这样做时:

@Model?.Person?.Zip

我的 Model? 被视为动态的,但 ? 打破了动态的东西,其余部分呈现为文本。

你是怎么解决这个问题的?

只是猜测

@(Model?.Person?.Zip)

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

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

@(...) 语法可以被认为是一种 "escape syntax",它在将哪些代码解析为表达式方面提供了更大的灵活性。

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

ASP.NET 团队正在寻求将对 C# 6 的某些 Razor v4(用于 ASP.NET 5 / MVC 6)支持移植回 Razor v3(用于 ASP.NET =] 4.x / MVC 5).

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

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

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

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

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

@(Model.Country?.Name)