如果始终为真,则可为 Nullable Decimal

Nullable Decimal If Is Always True

我有一个页面列出了工单中的项目。这些项目中的每一个都有许多属性,以及一个可选的 属性 折扣。如果工作订单没有折扣,我们想隐藏该列,如果有,我们必须在有价值的行中显示它。

这些值是从数据库中提取的,折扣是一个可以为 null 的十进制列,它被提取为一个可以为 null 的小数。

在控制器中,我检查是否有任何折扣,并在 ViewBag 中设置了一个名为 NoDiscount 的布尔值。

ViewBag.NoDiscount == false 检查被接受,但是如果它是 true 并且 item.Discount.HasValue检查已经过测试,它总是 returns true.

@if (ViewBag.NoDiscount == false) {
    <div class="col-xs-2" style="border-top: solid 1px #DDD;">
        if (@item.Discount.HasValue) {
        @item.Discount.Value.ToString("C", System.Globalization.CultureInfo.CreateSpecificCulture(ViewBag.Currency))
        }
    </div>
}

如果我破坏代码并测试空项目是否 Discount.HasValue,它 returns 错误,但代码继续。

我得到的错误是:

An exception of type 'System.InvalidOperationException' occurred in mscorlib.dll but was not handled in user code

Additional information: Nullable object must have a value.

看一个小时再问,问了5分钟自己解决

我的@放错地方了。

@if (ViewBag.NoDiscount == false) {
<div class="col-xs-2" style="border-top: solid 1px #DDD;">
    @if (item.Discount.HasValue) {
    @item.Discount.Value.ToString("C", System.Globalization.CultureInfo.CreateSpecificCulture(ViewBag.Currency))
    }
</div>
}