我有一个 EF 实体,它与一个 SQL 表相关联,该表包含一个名为“Active”的位字段。我从 T4 模板生成编辑代码,页面继承自 EF 实体。在页面底部,它生成了一个 CheckBoxFor,如下所示:
<%= Html.CheckBoxFor(model => model.Active) %>
我在model.Active下得到了美妙的红色波浪,错误消息说我不能隐式转换类型bool? bool 值。所以,我尝试了以下方法:
<%= Html.CheckBoxFor(model => (bool)model.Active) %>
当然,它不喜欢那样并给了我这个错误:
System.InvalidOperationException: Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.
我可能错过了一些简单的东西。
最佳答案
试试 model.Active.Value
如果此字段不应为空,则应将数据库端的数据类型更改为 not null
.
编辑
为什么会这样?
您的数据库字段定义为 FIELDNAME BIT NULL
.这意味着它可以包含三个值:NULL、true 和 false。既然可以包含三个值,就映射到bool?输入 Entity Framework 。 bool ?是 Nullable<bool>
的另一个名称,它是 bool 的包装器,允许它具有第三个值:NULL。由于 CheckBoxFor 期望两个值之一 - true 或 false,它不能除外 Nullable<bool>
.每个 Nullable 都有一个名为 value 的属性,它返回包装类型。但是您应该知道,当数据库字段将包含 null Nullable<bool>.Value
会抛出错误。如果您确定该字段不应包含 NULL 值,则应将其数据类型更改为 FIELDNAME BIT NOT NULL
并再次从数据库生成模型。这将改变 bool 的数据类型?为 bool 值,无需调用 Value 属性。
关于asp.net-mvc - ASP.net MVC CheckBoxFor 转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2267975/