2016-01-21 23 views
0

我有表记录如下布尔模型propertie的值在POST方法不结合

enter image description here

这如何在模型中的类中定义的那些两个属性

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 

这种形式的这是复选框观点

enter image description here

但一旦我提出,我可以在模型中看到这两个属性值POST方法

越来越空我怎么能结合本的复选框值布尔属性字段,正确?

+3

你不能看我给你的最后一个问题征求意见 正确的HTML。这不行!首先用'name =“Report”“创建一个输入,它与你的模型没有任何关系。再说一遍,复选框是用于绑定到“bool”,而不是“bool”? –

+0

你认为如何呈现不确定状态?你想回到你的表格中什么?如果在HTML中你只想看到true/false,那么就会出错**是你的ViewModel(是你的ViewModel,_right_?)如果不是那么现在你知道什么是错的:添加一个ViewModel(用bool)你的模型脱离你的观点。 –

+0

'创建名称=“报告”的输入'我无法理解它? – kez

回答

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。类型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) 

什么,从这个学习正确:

  1. 如果模型没有约束,经常检查您的生成 的HTML(表单控件的属性name必须的名称相匹配财产)
  2. 始终使用强类型xxxxFor() HtmlHelpers生成 表单控件。你不仅可以智能感知得到的,它确保 正确name属性产生的,任何错误报告
  3. 使用 HtmlHelpers(或name属性)时,不要试图改变value属性。佣工生成基于模型的属性,并从 默认值更改它们只会导致模型绑定失败