Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 复选框返回true或false,不添加到数组_C#_Asp.net Mvc_Arrays_Checkbox - Fatal编程技术网

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++;
}