17

我有一个 EF 实体,它与一个 SQL 表相关联,该表包含一个名为“Active”的位字段。我从 T4 模板生成编辑代码,页面继承自 EF 实体。在页面底部,它生成了一个 CheckBoxFor,如下所示:

<%= Html.CheckBoxFor(model => model.Active) %>

我在model.Active下得到了美妙的红色波浪,错误消息说我不能隐式转换类型bool?布尔值。所以,我尝试了以下方法:

<%= Html.CheckBoxFor(model => (bool)model.Active) %>

当然,它不喜欢那样并给了我这个错误:

System.InvalidOperationException:模板只能与字段访问、属性访问、一维数组索引或单参数自定义索引器表达式一起使用。

我可能错过了一些简单的东西。

4

1 回答 1

41

尝试model.Active.Value

如果此字段不应为空,则应将数据库端的数据类型更改为not null.

编辑

为什么会这样?

您的数据库字段定义为FIELDNAME BIT NULL. 这意味着它可以包含三个值:NULL、true 和 false。既然可以包含三个值,就映射到bool? 输入实体框架。布尔?是 的另一个名称Nullable<bool>,它是 bool 的包装器,允许它具有第三个值:NULL。由于 CheckBoxFor 需要两个值之一 - true 或 false,它不能 except Nullable<bool>。每个 Nullable 都有一个名为 value 的属性,它返回包装类型。但是您应该知道,当数据库字段包含 nullNullable<bool>.Value时会引发错误。如果您确定该字段不应包含 NULL 值,则应将其数据类型更改为FIELDNAME BIT NOT NULL并再次从数据库生成模型。这将改变 bool 的数据类型?为布尔值,无需调用 Value 属性。

于 2010-02-15T19:19:57.703 回答