【问题标题】:Getting multiple checkboxes from FormCollection element从 FormCollection 元素中获取多个复选框
【发布时间】:2011-02-06 17:55:53
【问题描述】:

给定多个 HTML 复选框:

<input type="checkbox" name="catIDs" value="1" />
<input type="checkbox" name="catIDs" value="2" />
...
<input type="checkbox" name="catIDs" value="100" />

如何在动作中从 FormCollection 中检索整数数组:

public ActionResult Edit(FormCollection form)
{
    int [] catIDs = (IEnumerable<int>)form["catIDs"]; // ???

    // alternatively:
    foreach (int catID in form["catIDs"] as *SOME CAST*)
    {
        // ...
    }

    return View();
}

注意:我阅读了相关问题,我不想更改我的操作参数,例如。 Edit(int [] catIDs).

【问题讨论】:

  • 您应该将checkboxs 的name 值更改为catIds[]

标签: asp.net-mvc checkbox formcollection


【解决方案1】:

当您有多个具有相同名称的控件时,它们是逗号分隔值。换句话说:

string catIDs = form["catIDs"];

catIDs 是“1,2,3,...”

因此,要获得所有值,您可以这样做:

string [] AllStrings = form["catIDs"].Split(',');
foreach(string item in AllStrings)
{
    int value = int.Parse(item);
    // handle value
}

或者使用 Linq:

var allvalues = form["catIDs"].Split(',').Select(x=>int.Parse(x));

然后你可以枚举所有的值。

【讨论】:

  • catID 可能是“1,false,3,4,false,6,...”。您可能必须从列表中删除这些错误。
【解决方案2】:

更安全的方法是使用:form.GetValues("CatIds") 这将为您获取帖子中传递的数组。以防万一您的输入中有逗号。

【讨论】:

    猜你喜欢
    • 2015-05-13
    • 2011-04-19
    • 2012-02-19
    • 1970-01-01
    • 2018-07-06
    • 2012-03-29
    • 2011-06-27
    相关资源
    最近更新 更多