【发布时间】:2013-10-24 12:23:45
【问题描述】:
我已经为此苦苦挣扎了好几个小时,但我似乎无法应用任何可行的逻辑。我有一个对象集合,我们称它们为项目,它们有一个布尔属性来定义它们是否是稍后添加到篮子时包含在内。我遇到的问题是我想要一个列出这些项目的页面,并且每个项目旁边都有一个复选框,用于切换是否包含该项目。
我有这个:
@using(Ajax.BeginForm("UpdateItems", "Controller", null,
new AjaxOptions { HttpMethod = "Post"}, new { id = "UpdateItemsForm" })
{
@foreach(var item in collection)
{
@Html.CheckBox("itemIncluded", item.Included)
}
}
<script>
$("#UpdateItemsForm").change(function ()
{
$(this).submit();
});
</script>
在控制器中我有
public JsonResult UpdateItems(bool[] itemIncluded)
{
//Do Something unimportant
}
问题是,在我的控制器中,我得到了一个我想要的布尔数组,但是数组的长度不一致,当我更改复选框时,我将收到一个包含 n 个元素的数组,具体取决于有多少个框被选中,例如,如果我选中 2/4 个框,我将得到一个包含 6 个布尔值的数组。该数组将包含选中框的真和假元素。 有什么办法可以强制数组大小,即始终为每个复选框获取一个包含单个元素的数组,如果选中或不选中,则为 true 或 false?
【问题讨论】:
-
你为什么不用
@Html.CheckBoxFor?如果您发布它,您将得到它是否也被选中。 -
你能发布你的视图的html输出吗?
-
@bump,或者更简洁,
@Html.DisplayFor(collection),然后构建自定义显示。 -
@bump 当我使用
@Html.CheckBoxFor时,我在控制器中得到空值,而不是数组。
标签: c# asp.net-mvc arrays checkbox