可空的bool值列表始终为空

我有部分观点。 在我的部分中,一些属性是可以为空的布尔值。 如果我选中或取消选中该复选框,则在保存此记录时它始终为空。 如果我想要在取消选中时返回false,那么我该怎么办?取消选中时检查是否为true,否则为null?

这是Entity类:

public string Description { get; set; } [Required] public string DocType { get; set; } [Display(Name = "User")] [Required] public int Key { get; set; } [Display(Name = "Path")] public string Name { get; set; } public bool? ShowFullWidth { get; set; } public List DmFormDefItems { get; set; } public bool? IsEnabled { get; set; } 

这是我的部分观点:

  if (Model.DmFormDefItems != null) { 
@for (int i = 0; i < Model.DmFormDefItems.Count; i++) { }
Enabled
@if (Model.DmFormDefItems.ElementAt(i).ShowFullWidth == true) { @Html.CheckBoxFor(m => m.DmFormDefItems[i].ShowFullWidth.HasValue) } else { @Html.CheckBoxFor(m => m.DmFormDefItems[i].ShowFullWidth.HasValue) } @if (Model.DmFormDefItems.ElementAt(i).IsEnabled == true) { @Html.CheckBoxFor(m => m.DmFormDefItems[i].IsEnabled.HasValue) } else { @Html.CheckBoxFor(m => m.DmFormDefItems[i].IsEnabled.HasValue) }

该复选框只能具有true或false状态。 处理bool时? 我使用下拉列表(NULL / True / False)

 public static class BooleanDropdownListForHelper { public static MvcHtmlString BooleanDropdownListFor( this HtmlHelper htmlHelper, Expression> property) { return BooleanDropdownListFor(htmlHelper, property, null); } public static MvcHtmlString BooleanDropdownListFor(this HtmlHelper htmlHelper, Expression> property, object htmlAttributes) { ModelMetadata metadata = ModelMetadata.FromLambdaExpression(property, htmlHelper.ViewData); bool? value = null; if (metadata != null && metadata.Model != null) { if (metadata.Model is bool) value = (bool)metadata.Model; else if (metadata.Model.GetType() == typeof(bool?)) value = (bool?)metadata.Model; } List items = new List() { new SelectListItem() { Text = BooleanTypeFor.Yes, Value = "True", Selected = (value.HasValue && value.Value == true) }, new SelectListItem() { Text = BooleanTypeFor.No, Value = "False", Selected = (value.HasValue && value.Value == false) } }; return htmlHelper.DropDownListFor(property, items, htmlAttributes ?? new { }); } } 

首先,你没有绑定到你的boolean属性,你绑定到它的HasValue属性,它是Nullable的readonly属性( 参考文档 ),这意味着当你回发时它不能被设置,所以你的控制器中的值将始终是默认null值。

复选框只有2个状态( truefalse ),但Nullable有3个状态( truefalsenull ),因此无法使用复选框输入表示Nullable

3种可能的选择

  1. 使用@Html.EditorFor(m => m.yourNullableBool) ,它将生成一个包含3个值的下拉列表(“True”,“False”和“Not Set”)
  2. 使用绑定到Nullable属性的3个单选按钮,值为truefalsenull
  3. 开发自己的html帮助器和jquery插件