【问题标题】:@Html.CheckBoxFor( cannot work with null boolean?@Html.CheckBoxFor( 不能使用空布尔值?
【发布时间】:2015-06-27 02:06:13
【问题描述】:

运行时错误:无法隐式转换类型“bool?”布尔值。存在显式转换(您是否缺少演员表?)

sql 数据库类型 = 位 对应变量的 MVC 视图控制器 = 复选框

问题: 如果 sql 数据库字段类型是具有 3 种状态的 BIT, sql数据库类型=位(真/假/空)

【问题讨论】:

  • 这里有什么问题?

标签: asp.net-mvc twitter-bootstrap asp.net-mvc-4 razor


【解决方案1】:

一个复选框只有两种状态...选中与未选中。所以null 的第三种状态是不合逻辑的。如果您尝试将 null 视为 false,请在创建视图模型时在控制器中进行该转换。

类似myViewModel.MyBool = dto.MyBitColumn != null && dto.MyBitColumn;

现在您可以在复选框中使用myViewModel.MyBool

【讨论】:

  • 如果未选中的 0 和选中的 1,null 会考虑复选框?
  • 如果你打算让所有东西都不可为空,你会遇到更多的麻烦,因为现在你必须清理每个字段。
  • 因此,如果您将 null 视为 false(未选中),为什么不将其设为不可为空的 bool,默认为 false?现在您不需要额外的逻辑......或者您仍然可以执行我在回答中提供的内容。老实说,当您开始将数据库 poco 传递给您的业务逻辑并且必须在任何地方调用 .value 以及空引用检查时,我真的认为您会生自己的气。
【解决方案2】:

@CheckBoxFor() 方法仅适用于 boolean 属性。该方法的签名是

public static MvcHtmlString CheckBoxFor<TModel>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, bool>> expression)

注意Func 中的TResultbool。复选框只有两种状态的原因 - 选中或未选中,相当于 truefalse

如果你的属性PType1bool?(可以为空),你需要使用

@Html.EditorFor(m => m.PType1)

这将生成一个包含 3 个值的下拉列表,“未设置”(相当于 null)、“真”和“假”。

旁注:“观察:没有复选框控件可以与相应的 sql 类型的位一起使用”。就在这里。 @Html.CheckBox() 可以与 bit 一起使用,只要该字段是 NOT NULL 等于 bool。如果您只想存储truefalse,则将该字段设置为NOT NULL

【讨论】:

  • 不,这不可能,我无法想象你为什么认为它可能。而且您不能使用CheckBoxFor() 绑定到字符串 - 请参阅我对your other question 的回答。你真正想做什么?您不能将值“YES”保存到 sql 位字段!
  • 您可以创建自己的复选框,如果为空,该复选框将显示为灰色,因此它可以指示从不设置。单击后,它可以变为非灰色和未选中以显示用户将其明确设置为 false。然后再次点击查看...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-11
  • 2020-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多