web-dev-qa-db-fra.com

Le nouvel opérateur null-conditionnel dans ASP.NET MVC Razor

Donc, depuis que C # 6.0 est sorti, j'utilise beaucoup l'opérateur null-conditionnel. Exemple:

Model?.Person?.Zip

Cependant, j'ai maintenant une situation où j'ai une solution où le client opère sur des modèles de domaine dans la vue. Alors que je traquais le développeur avec une hache, je trouve plus facile de simplement effectuer des contrôles nuls dans la vue.

Cependant, quand je vais ceci dans Razor:

@Model?.Person?.Zip

Mon Model? est vu comme dynamique, mais ? casse les choses dynamiques et le reste est rendu sous forme de texte.

Comment résolvez-vous cela?

39
Lars Holdgaard

Juste une supposition 

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

Pour être plus complet (je travaille sur l'équipe ASP.NET de Microsoft):

Comme Dieter B (et quelques autres) l’a bien noté, @(Model?.Person?.Zip) fonctionnera.

La syntaxe @(...) peut être considérée comme une "syntaxe d'échappement" qui permet beaucoup plus de flexibilité quant au code qui sera analysé en tant qu'expression.

Lors de la construction de la version actuelle de Razor, seul le C # 5 était utilisé, de sorte que les nouvelles syntaxes du C # 6 n'étaient pas directement prises en charge.

L’équipe ASP.NET cherche à prendre en charge une partie du support Razor v4 (utilisé dans ASP.NET 5/MVC 6) pour C # 6 vers Razor v3 (utilisé dans ASP.NET 4.x/MVC 5).

17
Eilon

Cela peut également se produire lorsqu'il manque l'un ou les deux packages NuGet suivants du projet:

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

Changez simplement le framework cible en .NetFramework 4.7 et installez ces paquets:

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

Ensuite, utilisez-le comme ceci:

@(Model.Country?.Name)
1
Masoud Darvishian