null 条件在 Razor 视图中是否有效?
Does the null conditional work in a Razor view?
我在 Razor 视图文件中有:
<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>
<pre>@Model.Exception.Message</pre>
<pre>@Model.Exception.InnerException?.Message</pre>
<pre>@Model.info</pre>
InnerException?.Message
比 Message
属性 显示更多。它看起来像 ToString()
方法的输出:
如果我使用的不是 null 条件运算符:
@if (Model.Exception.InnerException != null)
{
<pre>@Model.Exception.InnerException.Message</pre>
}
然后就如我所愿的出来了:
我对空条件运算符使用的语法不正确吗?
我认为问题的发生是因为隐式 Razor 表达式与前面的 HTML 标记一起使用:
<pre>@Model.Exception.InnerException?.Message</pre>
解释为这样,因此解析器只读取 Model.Exception.InnerException
属性:
<pre>@(Model.Exception.InnerException.ToString())?.Message</pre>
C# 6.0 及更高版本中的 null 条件运算符要求在引入 C# 6.0 之前的某些 Razor 版本中使用显式表达式,因为隐式表达式解析器仍然遵循以前版本的 C# 语法。由于显式表达式语法允许根据当前 C# 版本灵活地解析服务器端代码,因此上面的表达式应该这样写:
<pre>@(Model.Exception.InnerException?.Message)</pre>
注:
这是一种边缘情况,Razor 将 null 条件运算符错误解释为文字字符串的一部分,而不是具有隐式表达式的代码,而显式表达式有助于呈现 属性 内容。
参考:
相关问题:
我在 Razor 视图文件中有:
<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>
<pre>@Model.Exception.Message</pre>
<pre>@Model.Exception.InnerException?.Message</pre>
<pre>@Model.info</pre>
InnerException?.Message
比 Message
属性 显示更多。它看起来像 ToString()
方法的输出:
如果我使用的不是 null 条件运算符:
@if (Model.Exception.InnerException != null)
{
<pre>@Model.Exception.InnerException.Message</pre>
}
然后就如我所愿的出来了:
我对空条件运算符使用的语法不正确吗?
我认为问题的发生是因为隐式 Razor 表达式与前面的 HTML 标记一起使用:
<pre>@Model.Exception.InnerException?.Message</pre>
解释为这样,因此解析器只读取 Model.Exception.InnerException
属性:
<pre>@(Model.Exception.InnerException.ToString())?.Message</pre>
C# 6.0 及更高版本中的 null 条件运算符要求在引入 C# 6.0 之前的某些 Razor 版本中使用显式表达式,因为隐式表达式解析器仍然遵循以前版本的 C# 语法。由于显式表达式语法允许根据当前 C# 版本灵活地解析服务器端代码,因此上面的表达式应该这样写:
<pre>@(Model.Exception.InnerException?.Message)</pre>
注:
这是一种边缘情况,Razor 将 null 条件运算符错误解释为文字字符串的一部分,而不是具有隐式表达式的代码,而显式表达式有助于呈现 属性 内容。
参考:
相关问题: