我有一个EF实体,它绑定到一个SQL表,该表包含一个名为"Active“的位字段。我从T4模板生成编辑代码,页面继承自EF实体。在页面的底部,它生成了一个如下所示的CheckBoxFor:
<%= Html.CheckBoxFor(model => model.Active) %>
我在model.Active下得到了非常棒的红色squiggly,并且错误消息说我不能隐式转换bool类型?敬布尔。因此,我尝试了以下方法:
<%= Html.CheckBoxFor(model => (bool)model.Active) %>
当然,它不喜欢这样,并给了我这个错误:
System.InvalidOperationException:模板只能与字段访问、属性访问、一维数组索引或单参数自定义索引器表达式一起使用。
我可能漏掉了一些简单的东西。
发布于 2010-02-16 03:19:58
试试model.Active.Value
如果该字段不能为空,那么您应该将数据库端的数据类型更改为not null
。
编辑
这一切为什么要发生?
您的数据库字段定义为FIELDNAME BIT NULL
。这意味着它可以包含三个值: NULL、true和false。因为它可以包含三个值,所以它被映射到bool?在实体框架中键入。布尔?是Nullable<bool>
的另一个名称,它是bool的包装器,允许它有第三个值: NULL。由于CheckBoxFor需要两个值之一- true或false,所以它不能排除Nullable<bool>
。每个Nullable都有一个名为value的属性,它返回包装的类型。但是您应该知道,当数据库字段包含null时,Nullable<bool>.Value
将抛出一个错误。如果您确定此字段不应包含空值,则应将其数据类型更改为FIELDNAME BIT NOT NULL
,然后再次从数据库生成模型。这会将数据类型从bool更改吗?设置为bool,则不需要调用Value属性。
https://stackoverflow.com/questions/2267975
复制相似问题