从 FormCollection 元素中获取多个复选框

Posted

技术标签:

【中文标题】从 FormCollection 元素中获取多个复选框【英文标题】:Getting multiple checkboxes from FormCollection element 【发布时间】: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[] 【参考方案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") 这将为您获取帖子中传递的数组。以防万一您的输入中有逗号。

【讨论】:

以上是关于从 FormCollection 元素中获取多个复选框的主要内容,如果未能解决你的问题,请参考以下文章

如何从FormCollection返回对象列表?

使用多个 id 从可见元素中获取文本

从具有多个命名空间的 XElement 中获取元素

php xpath如何从父元素内的多个元素中获取值

ASP.NET 移动视图中的 FormCollection 为空

从jQuery中的多个相同的类名中获取值CSS