从FormCollection中获取所有选中的复选框

fea*_*net 6 checkbox asp.net-mvc controls webforms formcollection

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

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

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

var names = formCollection
               .Where(c => c is Checkbox && c.Checked)
               .Select(c => c.Name);
Run Code Online (Sandbox Code Playgroud)

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

Anywho,我已经得到了该线程的帮助以及下面BuildStarted的答案.以下代码完成了这一操作.

var additionalItems = form.AllKeys
       .Where(k => form[k].Contains("true") && k.StartsWith("addItem"))
               .Select(k => k.Substring(7));
Run Code Online (Sandbox Code Playgroud)

Bui*_*ted 5

不幸的是,该集合中没有这种类型的信息.但是,如果您在所有复选框之前添加类似的内容,<input type='checkbox' name='checkbox_somevalue' />则可以运行类似的查询

var names = formCollection.AllKeys.Where(c => c.StartsWith("checkbox"));
Run Code Online (Sandbox Code Playgroud)

由于只会检出已检查的值,因此您无需验证是否已对其进行检查.

这是一个只捕获检查值的人

var names = formCollection.AllKeys.Where(c => c.StartsWith("test") && 
                        formCollection.GetValue(c) != null &&
                        formCollection.GetValue(c).AttemptedValue == "1");
Run Code Online (Sandbox Code Playgroud)