【问题标题】:ASP.net MVC CheckBoxFor casting errorASP.net MVC CheckBoxFor 转换错误
【发布时间】:2010-02-15 18:12:14
【问题描述】:

我有一个 EF 实体,它与一个 SQL 表相关联,该表包含一个名为“Active”的位字段。我从 T4 模板生成编辑代码,页面继承自 EF 实体。在页面底部,它生成了一个 CheckBoxFor,如下所示:

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

我在model.Active下得到了漂亮的红色波浪,错误消息说我不能隐式转换类型bool?布尔值。所以,我尝试了以下方法:

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

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

System.InvalidOperationException: 模板只能与字段一起使用 访问,财产访问, 一维数组索引,或 单参数自定义索引器 表达式。

我可能遗漏了一些简单的东西。

【问题讨论】:

标签: asp.net-mvc checkboxfor


【解决方案1】:

试试model.Active.Value

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

编辑

为什么会这样?

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

【讨论】:

  • 宾果游戏!您是否愿意尝试解释为什么这会克服类型差异?
  • 你摇滚,LukLed!非常感谢!
  • 我在遇到同样的问题后才遇到这个问题,这个答案解决了我的问题。谢谢+1
猜你喜欢
  • 2020-10-05
  • 2013-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-25
  • 2011-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多