web-dev-qa-db-ja.com

ASP.NET MVC Razorの新しいnull条件演算子

そのため、C#6.0が登場して以来、私はヌル条件演算子を非常に多く使用しています。例:

Model?.Person?.Zip

ただし、顧客がビュー内のドメインモデルを操作するソリューションがある状況になりました。私は開発者をxで追い詰めますが、ビューでいくつかのnullチェックを行う方が簡単だと思います。

ただし、Razorでこれを実行すると:

@Model?.Person?.Zip

俺の Model?は動的と見なされますが、?は動的なものを破壊し、残りはテキストとしてレンダリングされます。

これをどのように解決しますか?

43
Lars Holdgaard

ただの推測

@(Model?.Person?.Zip)
64
Dieter B

いくつかの追加の完全性について(私はMicrosoftのASP.NETチームで働いています):

Dieter B(および他の一部)が正しく注意しているように、@(Model?.Person?.Zip)は機能します。

@(...)構文は、どのコードが式として解析されるかという点ではるかに柔軟性が高い「エスケープ構文」と考えることができます。

Razorの現在のバージョンがビルドされたとき、C#5のみが存在していたため、新しいC#6構文は直接サポートされませんでした。

ASP.NETチームは、C#6のRazor v4(ASP.NET 5/MVC 6で使用)サポートの一部をRazor v3(ASP.NET 4.x/MVC 5で使用)に戻すことを検討しています。

18
Eilon

これは、プロジェクトから次のNuGetパッケージの一方または両方が欠落している場合にも発生する可能性があります。

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

ターゲットフレームワークを.NetFramework 4.7に変更し、Nugetパッケージマネージャーを使用してこれらのパッケージをインストールするだけです。

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

次に、次のように使用します(部分的なRazor構文ではなく完全なC#構文を許可する括弧に注意してください)。

@(Model.Country?.Name)
1