Работает ли нулевое условное представление в представлении Razor? - PullRequest
0 голосов
/ 28 января 2019

У меня есть в файле просмотра Razor:

<code><h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>
<pre>@Model.Exception.Message
@Model.Exception.InnerException?.Message
@Model.info

InnerException?.Message показывает больше, чем свойство Message.Это выглядит как результат метода ToString():

enter image description here

Если я вместо нулевого условного оператора я использовал:

<code>@if (Model.Exception.InnerException != null)
{
  <pre>@Model.Exception.InnerException.Message
}

затем получается так, как я хотел:

enter image description here

Синтаксис, который я использую для условного оператора nullнеправильно?

1 Ответ

0 голосов
/ 28 января 2019

Я думаю, что проблема возникла, потому что неявное выражение Razor используется с тегом HTML, предшествующим ему:

<code><pre>@Model.Exception.InnerException?.Message

, что интерпретируется как это, следовательно, синтаксический анализатор читает только свойство Model.Exception.InnerException:

<code><pre>@(Model.Exception.InnerException.ToString())?.Message

Нулевой условный оператор в C # 6.0 и выше требует использования явного выражения в некоторых версиях Razor до введения C # 6.0, поскольку синтаксический анализатор неявных выражений все еще следует за предыдущими версиями C #синтаксис.Поскольку синтаксис явного выражения позволяет гибко анализировать код на стороне сервера в соответствии с текущей версией C #, приведенное выше выражение должно быть записано так:

<code><pre>@(Model.Exception.InnerException?.Message)

Примечание:

Это крайний случай, когда Razor неверно истолковал нулевой условный оператор как часть литеральной строки вместо кода с неявным выражением, а явное выражение помогает визуализировать содержимое свойства.

Ссылка:

Явные выражения Razor

Проблема, связанная с этим:

Новый нуль-условный оператор в ASP.NET MVC Razor

...