我发现了很多这方面的问题,但是没有一个问题可以解决,或者似乎无法解决我的问题。我有一个模特:
public class CheckBoxModel
{
public int Id{ get; set; }
public bool IsSelected { get; set; }
}
然后尝试将我的IsSelected bool绑定到这样的复选框:
<%= Html.CheckBox("IsSelectedCheck",Model.IsSelected)%>
我在页面上有很多项目,它们旁边都有一个复选框,我想要做的就是将所有项目的ID和已选择的项目传回控制器。
目前,IsSelected的值始终为false。每次用户切换复选框时,Html.CheckBox是否应设置Model.IsSelected的值。
由于
答案 0 :(得分:26)
试试这样:
<%= Html.CheckBoxFor(x => x.IsSelected) %>
此外,如果你想传递id,请不要忘记这样做:
<%= Html.HiddenFor(x => x.Id) %>
如果你收集了那些:
public class MyViewModel
{
public CheckBoxModel[] CheckBoxes { get; set; }
}
你可以:
<% 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>
<% } %>
将成功绑定到:
[HttpPost]
public ActionResult MyAction(MyViewModel model)
{
// model.CheckBoxes will contain everything you need here
...
}
答案 1 :(得分:16)
我绝对建议遵循Darin的方法来返回大部分时间的课程。如果您需要的只是经过检查的ID,那么这个替代方案是“快速”和肮脏的黑客:
<% foreach (var cb in Model.CheckBoxes) { %>
<div>
<input type="checkbox"
value="<%= cb.Id %>"
<%= cb.IsSelected ? "checked=\"checked\"" : "" %>
name="ids" />
</div>
<% } %>
将在以下操作中绑定到int[] ids
参数:
[HttpPost]
public ActionResult MyAction(int[] ids)
{
// ids contains only those ids that were selected
...
}
在MVC 4.0(Razor 2.0)中,您可以在视图中使用以下语法:
<input type="checkbox" value="@cb.Id" checked="@cb.IsSelected" name="ids" />