7

我有一个包含一大堆复选框和一些其他类型的控件的表单。我需要检索每个选定复选框的名称。

做这个的最好方式是什么?我可以用 linq 查询来做吗?

所以在伪代码中,我想做这样的事情:

var names = formCollection
               .Where(c => c is Checkbox && c.Checked)
               .Select(c => c.Name);

更新似乎 MVC 提交复选框的方式与普通表单的行为方式不同,因为还呈现了隐藏字段。我在这里找到了详细信息:如何处理 ASP.NET MVC 表单中的复选框?

任何人,我已经在该线程的帮助下以及下面 BuildStarted 的答案下工作了。下面的代码成功了。

var additionalItems = form.AllKeys
       .Where(k => form[k].Contains("true") && k.StartsWith("addItem"))
               .Select(k => k.Substring(7));
4

3 回答 3

5

不幸的是,该集合中没有这种类型的信息。但是,如果您在所有复选框前面加上类似的东西,<input type='checkbox' name='checkbox_somevalue' />那么您可以运行类似的查询

var names = formCollection.AllKeys.Where(c => c.StartsWith("checkbox"));

由于只会发回已检查的值,因此您无需验证它们是否已被检查。

这是一个只抓取检查值的

var names = formCollection.AllKeys.Where(c => c.StartsWith("test") && 
                        formCollection.GetValue(c) != null &&
                        formCollection.GetValue(c).AttemptedValue == "1");
于 2010-09-30T14:50:18.980 回答
0

这是多年来不活跃的老问题之一,但我偶然发现了它。我的问题是我有一组复选框 - 假设名称是“IsValid”并且想要获取每个复选框的状态(我的项目在 MVC 5 中)。在提交表单时,我执行了表单收集循环并将值设为...

if (key.Contains("IsValid"))
                    sV = (string[])collection.GetValue(key.ToString()).RawValue;

由于在表单发布时,隐藏字段值也通过选中的复选框发布;该数组包含一个附加值“false”,用​​于仅选中复选框。为了摆脱我使用以下功能的那些;我希望它可以帮助某人,如果我的方法是错误的,那么更好的解决方案也会对我有所帮助!

sV = FixCheckBoxValue(sV);

        private string[] FixCheckBoxValue(string[] sV)
    {
        var iArrayList = new List<string>(sV);

        for (int i = 0; i < iArrayList.Count; i++)
        {
            if (iArrayList[i].ToString() == "true")
            {
                iArrayList.RemoveAt(i + 1);
            }                
        }
        return iArrayList.ToArray();
    }
于 2014-05-19T08:59:45.600 回答
0

在回答有关复选框数组的帖子时,您最初可以按名称过滤掉复选框。

var keys = formCollection.AllKeys.Where(x => x.StartsWith("IsValid");

然后你可以将它们作为一个集合循环。

于 2021-12-26T18:12:06.890 回答