我有一个页面列出工单中的项目。这些项目中的每一项都有许多属性,以及折扣的可选属性。如果工作订单没有折扣我们想要隐藏列,如果有,我们必须为具有值的行显示它。
这些值是从数据库中提取的,而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.
答案 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>
}