我在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()
方法的输出:
如果我使用的不是空条件运算符,则使用:
@if (Model.Exception.InnerException != null)
{
<pre>@Model.Exception.InnerException.Message</pre>
}
然后随心所欲地出来:
我为空条件运算符使用的语法不正确吗?
答案 0 :(得分:0)
我认为发生此问题是因为在HTML标记之前使用了隐式Razor表达式:
<pre>@Model.Exception.InnerException?.Message</pre>
解释为这样,因此解析器仅读取Model.Exception.InnerException
属性:
<pre>@(Model.Exception.InnerException.ToString())?.Message</pre>
在引入C#6.0之前,C#6.0及更高版本中的空条件运算符要求在某些Razor版本中使用显式表达式,因为隐式表达式解析器仍遵循以前的C#语法版本。由于显式表达式语法允许根据当前C#版本灵活地解析服务器端代码,因此上面的表达式应这样写:
<pre>@(Model.Exception.InnerException?.Message)</pre>
注意:
这是一个极端情况,Razor将空条件运算符误解为文字字符串的一部分,而不是带有隐式表达式的代码,而显式表达式有助于呈现属性内容。
参考:
相关问题: