我的表记录如下
这是如何在模型类中定义的两个属性
public bool? Report_Users { get; set; }
public bool? Innovation_Discussion_User { get; set; }
这是Form
语法,用于填充复选框中的布尔值
@Html.CheckBox("Report User", Model.Report_Users.GetValueOrDefault(), new { @value = "false" }) Report User
@Html.CheckBox("Innovation Discussion User", Model.Innovation_Discussion_User.GetValueOrDefault(), new { @value = "false" }) Innovation Discussion User
这是该表格的复选框视图
但是一旦我提交,我可以在模型中看到这两个属性值在POST方法中变为空
如何正确地将此复选框值绑定到布尔属性字段?
答案 0 :(得分:0)
您的实施存在许多问题。
您的CheckBox("Report User", ...)
方法正在为name="Report"
生成一个复选框(以及相关的隐藏输入),并且您的模型不包含名为Report
的属性。因为Report_Users
没有回发任何值,所以它的值将始终是POST方法中的默认值(null
)。为了绑定到bool? Report_Users
,它必须是CheckBox("Report_User", ...)
(下划线而不是空格)。
但是,更改此值意味着Report_User
的值现在始终为false
而不是null
,因为您已添加new { @value = "false" }
。 CheckBox()
方法会生成2个输入<input type="checkbox".. value="True" />
和<input type="hidden".. value="False" />
,以便正确绑定到您的媒体资源。您现在已覆盖它以生成<input type="checkbox".. value="false" />
,因此即使选中此复选框,也会发布false
的值。
但是,您的代码的真正问题是您的属性为bool?
(可为空),而CheckBox()
旨在绑定到bool
。 typeof bool?
有3个状态(true / false / null),而复选框有2个状态(开/关或真/假)。不清楚为什么您的数据库属性可以为空,但如果您无法更改它,那么(一如既往)使用具有bool
属性的视图模型。在GET方法中,将数据模型映射到视图模型时,可以使用
myViewModel.ReportUser = myDataModel.Report_User.GetValueOrDefault();
现在您可以使用强类型助手
正确构建视图@Html.CheckBoxFor(m => m.ReportUser)
@Html.LabelFor(m => m.ReportUser, "Report User") // use a label
// or add [Display(Name="Report User")] and use @Html.LabelFor(m => m.ReportUser)
从中学到什么:
name
属性必须与名称匹配
财产)xxxxFor()
HtmlHelpers进行生成
表格控件。你不仅得到了智能感知,它确保了
生成正确的name
属性,并报告任何错误value
属性
HtmlHelpers(或name
属性)。助手产生了
根据模型属性更正html并从中更改它们
默认值只会导致模型绑定失败