ASP.net MVC CheckBoxFor投射错误如何解决?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (17)

我有一个EF实体绑定到包含一个称为“活动”的位域的SQL表。我从T4模板生成编辑代码,并且该页面从EF实体继承。在页面的底部,它生成了一个CheckBoxFor,像这样:

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

我在model.Active下获得了精彩的红色波浪曲线,并且错误消息表明我不能隐式转换类型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?键入实体框架。布尔?是另一个名字Nullable<bool>,它是bool的包装,允许它具有第三个值:NULL。由于CheckBoxFor需要两个值之一 - true或false,所以不能除外Nullable<bool>。每个Nullable都有一个叫做value的属性,它返回被包装的类型。但是你应该知道,当数据库字段包含null时Nullable<bool>.Value会抛出错误。如果确定此字段不应包含NULL值,则应将其数据类型更改为FIELDNAME BIT NOT NULL并再次从数据库生成模型。这将改变数据类型从布尔?布尔,并且不需要调用Value属性。

扫码关注云+社区