C# 复选框返回true或false,不添加到数组
我已经绞尽脑汁数小时了,我似乎无法应用任何一种逻辑。我有一个对象集合,让我们称它们为项目,它有一个布尔属性来定义在以后添加到篮子时是否要包含它们。我遇到的问题是,我想要一个列出这些项目的页面,并且在每个项目旁边都有一个复选框,用于切换是否包含该项目 我有这个:C# 复选框返回true或false,不添加到数组,c#,asp.net-mvc,arrays,checkbox,C#,Asp.net Mvc,Arrays,Checkbox,我已经绞尽脑汁数小时了,我似乎无法应用任何一种逻辑。我有一个对象集合,让我们称它们为项目,它有一个布尔属性来定义在以后添加到篮子时是否要包含它们。我遇到的问题是,我想要一个列出这些项目的页面,并且在每个项目旁边都有一个复选框,用于切换是否包含该项目 我有这个: @using(Ajax.BeginForm("UpdateItems", "Controller", null, new AjaxOptions { HttpMethod = "Post"}, new { id = "Up
@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>
问题是,在我的控制器中,我得到了一个布尔数组,这是我想要的,但数组的长度不一致,当我更改复选框时,我将收到一个n个元素的数组,这取决于选中的框数,例如,如果我选中2/4个框,我将得到一个6个布尔的数组。此数组将包含复选框的true和false元素。
是否有任何方法可以强制执行数组大小,即始终为每个复选框获取一个包含单个元素的数组,如果选中或未选中,则为true或false?这不是错误,而是功能
我将控制器更改为使用FormCollection而不是数组。然后,它变成了一个简单的例子,解析控制器中复选框中的文本,这是非常愚蠢的true、false表示true条件或false表示false。这样,您将始终获得正确长度的数组,并且能够处理复选框的true和false条件。另外,一个小提示,为了使其工作,复选框应具有唯一的名称,其中包含一些常用字符串,在我的示例中,我只是这样做:
{
var counter = 0;
}
@foreach(var item in Model.collection)
{
<div class="item">
@Html.Checkbox("item"+counter.ToString(), item.Included)
</div>
count++;
}
我知道,这不是最优雅的做事方式,但它是有效的,这才是最重要的,过早的优化和试图成为代码高手总是会导致问题 为什么不使用@Html.CheckBoxFor?如果你发布,你会得到它是否也被选中。你能发布视图的html输出吗?@bump,或者更简洁地说,@html.DisplayForcollection,然后只构建一个自定义显示。@bump当我在控制器中使用@html.CheckBoxFor时,我得到的是null,而不是数组。你不应该发布没有任何描述的链接。请参阅meta上的链接问题。
{
var counter = 0;
}
@foreach(var item in Model.collection)
{
<div class="item">
@Html.Checkbox("item"+counter.ToString(), item.Included)
</div>
count++;
}
int counter = 0;
foreach(var item in sessionCollection)
{
string index = string.Concat("item", counter.ToString());
string valueFromCheck = formCollection[index];
if(valueFromCheck == "true,false")
item.Included = true;
if(valueFromCheck == "false")
item.Included = false;
i++;
}