可空的十进制如果总是如此

时间:2015-08-05 09:14:30

标签: razor nullable invalidoperationexception

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

这些值是从数据库中提取的,而Discount是一个可以为空的十进制列,它被拉入可以为空的十进制数。

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

ViewBag.NoDiscount == false 检查是否有效,但如果是,并且测试了 item.Discount.HasValue 检查,则它始终返回true。< / p>

@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,它会返回false,但代码会继续。

我得到的错误是:

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.

1 个答案:

答案 0 :(得分:0)

在我问之前看了一个小时,然后我在问了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>
}