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,因为没有隐藏的输入
- 成本是在视图中编写更多代码
<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" />