在 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。我该如何处理这种情况?
你可以让你的布尔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。