Asp.net mvc MVC绑定到复选框

Asp.net mvc MVC绑定到复选框,asp.net-mvc,Asp.net Mvc,关于这一点,我发现了很多问题,但没有一个能够或似乎能够回答我的问题。我有一个模型: public class CheckBoxModel { public int Id{ get; set; } public bool IsSelected { get; set; } } 然后尝试将我的IsSelected bool绑定到如下复选框: <%= Html.CheckBox("IsSelectedCheck",Model.IsSelected)%>

关于这一点,我发现了很多问题,但没有一个能够或似乎能够回答我的问题。我有一个模型:

public class CheckBoxModel
{
            public int Id{ get; set; }
    public bool IsSelected { get; set;  }
}
然后尝试将我的IsSelected bool绑定到如下复选框:

<%= Html.CheckBox("IsSelectedCheck",Model.IsSelected)%>
<%= Html.CheckBoxFor(x => x.IsSelected) %>

我在一个页面上有很多项,它们旁边都有一个复选框,我所要做的就是将所有项的id以及选择的项传递回控制器

目前,IsSelected的值总是错误的。应在用户每次切换复选框时设置Model.IsSelected的值

谢谢

试着这样做:

<%= Html.CheckBox("IsSelectedCheck",Model.IsSelected)%>
<%= Html.CheckBoxFor(x => x.IsSelected) %>
你可以:

<% for (var i = 0; i < Model.CheckBoxes.Length; i++) { %>
    <div>
        <%= Html.HiddenFor(x => x.CheckBoxes[i].Id) %>
        <%= Html.CheckBoxFor(x => x.CheckBoxes[i].IsSelected) %>
    </div>
<% } %>
Darin的绝妙回答的另一种选择 我绝对推荐遵循Darin的方法返回课堂,这将是大部分时间。如果您只需要检查ID,则此替代方案是“快速”和肮脏的黑客:

<% foreach (var cb in Model.CheckBoxes) { %>
  <div>
    <input type="checkbox" 
      value="<%= cb.Id %>"
      <%= cb.IsSelected ? "checked=\"checked\"" : "" %>
      name="ids" />
  </div>
<% } %>
  • 好处是更干净的html,因为没有隐藏的输入
  • 成本是在视图中编写更多代码
在MVC 4.0(Razor 2.0)中,您可以在视图中使用以下语法:

<input type="checkbox" value="@cb.Id" checked="@cb.IsSelected" name="ids" />


我以前也尝试过x.IsSelected)%%>但我也遇到了同样的问题。这可能是一个愚蠢的问题,但这段代码是否必须在表单中才能工作,因为目前我在表单外部使用这些复选框。@Marcel,当然,它必须在表单中。如果不将值放入表单中,您希望如何将值发送到服务器?你可以使用AJAX来实现,但你必须为此编写javascript。我可能没有正确解释自己,我确实有提交数据的表单。这就行了,我只是说复选框本身不在表单中。然后,当我提交表单时,我会:@Marcel,我重复我的问题:如果复选框不在表单中,您希望如何将其值发送到服务器?您似乎在表单中放置了一些隐藏字段,但显然,在呈现页面时,该隐藏字段具有服务器上复选框的值。用户可以自由选中/取消选中复选框,该复选框不会以任何方式反映您存储在隐藏字段中的值。因此,回发时得到的是隐藏字段的值,这是初始值,而不是用户可以修改的复选框的实际值。当然,我明白了。是的,我现在已经更改了网页。这很好,我有一匹完整的母马。再次感谢Darin。这是Darin方法的一个很好的替代方案,现在使用MVC4+非常简单。感谢您的模型的属性名称是
IsSelected
,但在您的视图中,您已将其命名为
IsSelectedCheck
[HttpPost]
public ActionResult MyAction(int[] ids) 
{
    // ids contains only those ids that were selected
    ...
}
<input type="checkbox" value="@cb.Id" checked="@cb.IsSelected" name="ids" />