Ответ 1
Просто угадать
@(Model?.Person?.Zip)
Так как С# 6.0 вышел, я довольно часто использовал оператор с нулевым условием. Пример:
Model?.Person?.Zip
Однако теперь у меня есть ситуация, когда у меня есть решение, где клиент работает с моделями домена в представлении. Хотя я бы выследил разработчика топором, мне легче просто выполнить некоторые нулевые проверки в представлении.
Однако, когда я иду в Razor:
@Model?.Person?.Zip
My Model?
рассматривается как динамический, но ?
ломает динамические вещи, а отдых отображается как текст.
Как вы решаете это?
Просто угадать
@(Model?.Person?.Zip)
Для некоторой дополнительной полноты (я работаю над командой ASP.NET в Microsoft):
Как правильно заметил Дитер Б (и некоторые другие), @(Model?.Person?.Zip)
будет работать.
Синтаксис @(...)
можно рассматривать как синтаксис "escape", который обеспечивает гораздо большую гибкость, с точки зрения которого код будет анализироваться как выражение.
Когда была создана текущая версия Razor, был только С# 5, поэтому новые синтаксисы С# 6 не поддерживались напрямую.
Команда ASP.NET хочет вернуть обратно часть Razor v4 (используется в ASP.NET 5/MVC 6) для С# 6 обратно в Razor v3 (используется в ASP.NET 4.x/MVC 5).
Это также может произойти, если вы пропустили один или оба из следующих пакетов NuGet из проекта:
Просто измените целевую платформу на .NetFramework 4.7
и установите эти пакеты с помощью диспетчера пакетов Nuget:
Затем используйте его следующим образом (обратите внимание на круглые скобки, которые допускают полный синтаксис С#, а не частичный синтаксис Razor):
@(Model.Country?.Name)