因此,自从C#6.0问世以来,我一直在使用空条件运算符。例如:
Model?.Person?.Zip
但是,我现在有一种情况,我有一个解决方案,客户在视图中的域模型上运行。虽然我会用斧头追捕开发人员,但我发现在视图中进行一些空检查会更容易。
但是,当我在Razor中使用它时:
@Model?.Person?.Zip
我的Model?
被视为动态,但?
打破了动态内容,其余内容呈现为文字。
你是如何解决这个问题的?
答案 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包,也会发生这种情况:
答案 3 :(得分:1)
只需将目标框架更改为.NetFramework 4.7
并使用Nuget软件包管理器安装以下软件包:
然后像这样使用它(请注意括号,允许使用完整的C#语法而不是部分Razor语法):
@(Model.Country?.Name)