在 MVC ASP.NET 处理错误的布尔数据

本文关键字:布尔 数据 错误 处理 MVC ASP NET | 更新日期: 2023-09-27 17:56:56

我有一个MVP应用程序,它使用EntityFramework从SQL DB读取数据。该数据是从外部CMS网站数据库中复制的,因此数据并不总是可靠的。

我读到的一个字段是 SQL 中的"位"数据类型,要么是 1 要么是 0,ASP.NET MVC 希望它作为布尔值,否则我会收到有关将布尔值转换为 int 的错误。

问题是有时位值在数据库中可能为 NULL,这会让我的 MVC 应用程序崩溃。我无法检查 NULL,因为我收到布尔数据类型只能为真或假的错误。

namespace Foo.Models
{
    [Table("provider")]
    public class Bar
    {
        //can't check for null here, getter and setter only allow boolean
        public Boolean FooBar { get; set; }
    }
}

控制器

namespace Foo.Controllers
{
    public ActionResult BarList()
    {
         //Can't check for null here, because if(Boolean == null) will always evaluate to false
         List<Bar> bars = db.Bar.ToList();
         return View(bars);
    }
}

如果 FooBar 永远为 NULL,则会在视图中抛出一个错误,即我不能在布尔值中使用 NULL。我该如何处理这种情况?

在 MVC ASP.NET 处理错误的布尔数据

你可以让你的布尔NULLABLE。这意味着您的布尔值可以有值,也可以没有:

public Boolean? FooBar { get; set; }

您可以使用泛型Nullable<bool>(也可以表示为 bool?):

Nullable<bool> nullableBool;

然后按如下方式使用它:

bool realBool = (nullableBool.HasValue && nullableBool);
// or
if (nullableBool == true) { ... } // true
else { ... } // false or null

你可以Nullable<T>。 空

public Boolean? FooBar { get; set; }

可为空结构的两个基本成员是 具有值和值属性。如果 的 HasValue 属性 可为空的对象为真,可以访问对象的值 与 Value 属性。如果 HasValue 属性为 false,则值 的对象未定义,并且尝试访问 Value 属性 引发 InvalidOperationException。