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

本文关键字:NET MVC 剃刀 条件运算符 ASP | 更新日期: 2023-09-27 18:18:11

所以自从c# 6.0发布以来,我一直在大量使用空条件运算符。例子:

Model?.Person?.Zip

然而,我现在有一种情况,我有一个解决方案,其中客户操作视图中的域模型。虽然我会用斧头追捕开发人员,但我发现在视图中做一些null检查更容易。

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

@Model?.Person?.Zip

我的Model?被视为动态的,但?打破了动态的东西,其余的被渲染为文本。

你如何解决这个问题?

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

只是猜测

@(Model?.Person?.Zip)

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

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

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

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

ASP。. NET团队正在寻求将一些Razor v4(用于ASP. NET)后端移植。. NET 5/MVC 6)对c# 6的支持回到Razor v3(在ASP中使用)。净4。

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

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

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

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

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

@(Model.Country?.Name)