ASP.net MVC CheckBoxFor转换错误

Jer*_*van 17 asp.net-mvc checkboxfor

我有一个绑定到SQL表的EF实体,该表包含一个名为"Active"的位字段.我从T4模板生成编辑代码,页面继承自EF实体.在页面的底部,它生成了一个CheckBoxFor,如下所示:

<%= Html.CheckBoxFor(model => model.Active) %>
Run Code Online (Sandbox Code Playgroud)

我在模型下获得了漂亮的红色波浪形.活跃,并且错误消息说我不能隐式转换类型bool?布尔.所以,我尝试了以下内容:

<%= Html.CheckBoxFor(model => (bool)model.Active) %>
Run Code Online (Sandbox Code Playgroud)

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

System.InvalidOperationException:模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式.

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

Luk*_*Led 40

尝试 model.Active.Value

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

编辑

为什么会这样?

您的数据库字段定义为FIELDNAME BIT NULL.这意味着它可以包含三个值:NULL,true和false.因为它可以包含三个值,所以它被映射到bool?输入实体框架.布尔?是另一个名称Nullable<bool>,它是bool的包装,允许它有第三个值:NULL.由于CheckBoxFor需要两个值中的一个 - 真或假,它不能除外Nullable<bool>.每个Nullable都有一个名为value的属性,它返回包装类型.但是你应该知道,当数据库字段包含null时Nullable<bool>.Value会抛出错误.如果您确定此字段不应包含NULL值,则应将其数据类型更改为FIELDNAME BIT NOT NULL并再次从数据库生成模型.这会改变bool的数据类型吗?bool并且不需要调用Value属性.