从 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)
.
【问题讨论】:
您应该将checkbox
s 的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 元素中获取多个复选框的主要内容,如果未能解决你的问题,请参考以下文章