我有一个EF实体,它绑定到一个包含名为“active”的位字段的SQL表。我从T4模板生成编辑代码,页面从EF实体继承。在页面底部,它为如下内容生成了一个复选框:
<%= Html.CheckBoxFor(model => model.Active) %>
我在model.active下得到了奇妙的红色,错误消息说我不能隐式转换bool类型?对布尔。因此,我尝试了以下方法:
<%= Html.CheckBoxFor(model => (bool)model.Active) %>
当然,它不喜欢这样,给了我这个错误:
System.InvalidOperationException:无效操作异常: 模板只能与字段一起使用 访问,属性访问, 一维数组索引,或 单参数自定义索引器 表达。
我可能遗漏了一些简单的东西。
尝试 model.Active.Value
model.Active.Value
如果此字段不可为空,则应将数据库端的数据类型更改为 not null .
not null
编辑
为什么会这样?
数据库字段定义为 FIELDNAME BIT NULL . 它意味着它可以包含三个值:空、真和假。因为它可以包含三个值,所以它被映射到bool?在实体框架中键入。布尔?是的另一个名字 Nullable<bool> ,它是围绕bool的包装,允许它具有第三个值:空。由于checkboxfor需要两个值中的一个-true或false,因此它不能 可以为空<bool> . 每个可为空的表都有一个名为value的属性,该属性返回包装类型。但您应该知道,当数据库字段将包含空值时 Nullable<bool>.Value 将引发错误。如果确定此字段不应包含空值,则应将其数据类型更改为 FIELDNAME BIT NOT NULL 再次从数据库生成模型。这会改变bool的数据类型吗?不需要调用Value属性。
FIELDNAME BIT NULL
Nullable<bool>
可以为空<bool>
Nullable<bool>.Value
FIELDNAME BIT NOT NULL