如何让 Null Coalesce 运算符在 MVC Razor ASP.NET 工作
本文关键字:Razor MVC ASP NET 工作 运算符 Null Coalesce | 更新日期: 2023-09-27 18:17:12
我有以下内容,但它
失败并出现NullReferenceException
: <td>@item.FundPerformance.Where(xx => fund.Id == xx.Id).FirstOrDefault().OneMonth ?? -</td>
OneMonth
定义为
public virtual decimal? OneMonth { get; set; }
并且其值在失败时为 null。
我以为 Null Coalesce 运算符会测试它是否为 null,如果是,则返回运算符右侧的值?
我需要更改什么才能完成这项工作?
正如您所写的那样,剃刀语法以"一个月"结尾。这??被解释为文本。要将其解释为 razor,您必须将整个语句包装在 (( 中,如下所示:
<td>@(item.FundPerformance.Where(xx => fund.Id == xx.Id).FirstOrDefault().OneMonth ?? "-")</td>
这仍然会给你一个错误:左运算符是小数,右运算符是字符串。因此,您可以渲染零而不是"-"或使用三元运算符,其中OneMonth.Value.ToString((作为左值,"-"作为右值。
这与 MVC 或 Razor 无关。
FundPerformance.Where(xx => fund.Id == xx.Id).FirstOrDefault()
如果没有匹配的元素,将返回 null,null 没有一个月的 porperty,因此您将获得一个空引用异常。 您不能使用 ??运算符,因为它不是 OneMonth 为空,它是 FirstOrDefault()
的结果。
若要进行测试,请将代码更改为
FundPerformance.Where(xx => fund.Id == xx.Id).First().OneMonth ?? -</td>
如果您收到"序列不包含任何元素"异常,那么您就知道这是您的问题。