【问题标题】:Checkboxes to return true of false, not add to an array复选框返回真或假,不添加到数组
【发布时间】: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


【解决方案1】:

我将控制器更改为使用 FormCollection 而不是数组。然后它变成了一个从控制器中的复选框解析文本的简单案例,这是非常愚蠢的“真,假”表示真条件,或“假”表示假。这样,您将始终获得正确长度的数组,并且能够处理复选框的真假条件。另外,需要注意的是,为了使其正常工作,复选框应该具有唯一的名称,其中包含一些常见的字符串,在我的情况下,我只是这样做了:

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

我知道,这不是最优雅的做事方式,但它确实有效,这很重要,过早的优化和试图成为代码聪明的驴子总是会导致问题。

【讨论】:

    【解决方案2】:

    这不是一个错误,这是一个功能;)

    http://forums.asp.net/t/1314753.aspx

    【讨论】:

    • 你不应该发布没有任何描述的链接。请参阅 meta 上的“链接失效”问题。
    猜你喜欢
    • 2015-12-01
    • 1970-01-01
    • 2014-05-10
    • 2023-03-03
    • 2021-11-05
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多