剃刀安全导航操作员?

时间:2013-04-01 18:25:09

标签: c# asp.net-mvc razor

有没有办法以空安全的方式在Razor视图中导航对象图(没有@if防护块?

例如,我在Index.cshtml中有以下内容:

@foreach (Store.Models.Product product in @Model)
{
    <tr>
        <td>@product.Id</td>  
        <td>@product.ProductName</td>  
        <td>@String.Format("{0:C}", @product.Price)</td>
        <td>@product.Quantity</td>
        @if (@product.Category != null)
        {
            <td>@product.Category.CategoryName</td>
        }
        else 
        {
            <td></td>
        }
    </tr>
}

并非所有产品都有类别。如果没有,Product.Category为空。

我真正想做的是安全地能够导航对象图,而不必担心NullReferenceException炸毁视图。

在Groovy / Grails中,我习惯使用Safe Navigation Operator并执行以下操作:

<td>@product?.Category?.CategoryName</td>

当然,这在Razor中不起作用。

Razor中是否有任何等效物?

2 个答案:

答案 0 :(得分:1)

一种方法是使用内联条件:

<td>@(product.Category != null ? product.Category : "")</td>

让代码更紧凑

答案 1 :(得分:1)

我正在使用此代码,只需用括号@()将代码括起来:

<a class="float-right bg-warning text-dark">
    @(order.BilledAmount?.ToString("0,0.00"))
</a>