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)
所以自从 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)