asp.net-mvc - ASP.net MVC CheckBoxFor 转换错误

标签 asp.net-mvc checkboxfor

我有一个 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/

相关文章:

asp.net-mvc - MVC - 它只是一个 3 层模型吗?

JQuery:单击复选框时更改元素的样式

asp.net-mvc - 如何在 MVC 3 Razor 中将列表绑定(bind)为模型上的属性?

c# - 从静态类访问 HttpContextBase 对象

c# - 为什么 HttpPostedFile 在 View 的操作方法中出现 null ?

asp.net-mvc - 在 ASP.NET MVC View 中使用代码隐藏

c# - 当查询仅因属性不同时,如何解决 LINQ to Entity 查询重复问题?

asp.net-mvc - 如何在左侧放置剑道复选框标签

jquery - 阻止只读复选框调用事件处理程序?

asp.net-mvc - .net MVC Html.CheckBoxFor 的正确使用