wake-up-neo.net

Der neue nullbedingte Operator in ASP.NET MVC Razor

Seit C # 6.0 herauskam, habe ich den nullbedingten Operator ziemlich oft verwendet. Beispiel:

Model?.Person?.Zip

Ich habe jedoch jetzt eine Situation, in der ich eine Lösung habe, bei der der Kunde Domänenmodelle in der Ansicht verwendet. Während ich den Entwickler mit einer Axt jagen würde, finde ich es einfacher, einige Nullprüfungen in der Ansicht durchzuführen.

Wenn ich dies jedoch in Razor gehe:

@Model?.Person?.Zip

Mein Model? wird als dynamisch angesehen, aber ? bricht die dynamischen Dinge und der Rest wird als Text dargestellt.

Wie löst du das?

39
Lars Holdgaard

Nur eine Vermutung 

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

Für zusätzliche Vollständigkeit (ich arbeite im ASP.NET-Team von Microsoft):

Wie Dieter B (und einige andere) richtig feststellen, funktioniert @(Model?.Person?.Zip).

Die @(...)-Syntax kann als eine "Escape-Syntax" betrachtet werden, die weitaus mehr Flexibilität bietet, wenn Code als Ausdruck analysiert wird.

Als die aktuelle Version von Razor erstellt wurde, war nur C # 5 verfügbar, sodass die neuen C # 6-Syntaxen nicht direkt unterstützt wurden.

Das ASP.NET-Team versucht, einen Teil der Unterstützung von Razor v4 (in ASP.NET 5/MVC 6 verwendet) für C # 6 zurück auf Razor v3 (in ASP.NET 4.x/MVC 5) zu portieren.

17
Eilon

Dies kann auch passieren, wenn eines oder beide der folgenden NuGet-Pakete aus dem Projekt fehlen:

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

Ändern Sie einfach das Zielframework in .NetFramework 4.7 und installieren Sie diese Pakete:

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

Dann benutze es so:

@(Model.Country?.Name)
1