我有一个表单,其中包含一大堆复选框和一些其他类型的控件。我需要检索每个所选复选框的名称。
最好的方法是什么?我可以使用linq查询吗?
所以在伪代码中,我希望做这样的事情:
var names = formCollection
.Where(c => c is Checkbox && c.Checked)
.Select(c => c.Name);
更新 MVC提交复选框的方式似乎与普通表单的行为方式不同,因为隐藏字段也会呈现。我在这里找到了详细信息:How to handle checkboxes in ASP.NET MVC forms?
Anywho,我已经得到了该线程的帮助以及下面BuildStarted的答案。以下代码可以解决问题。
var additionalItems = form.AllKeys
.Where(k => form[k].Contains("true") && k.StartsWith("addItem"))
.Select(k => k.Substring(7));
答案 0 :(得分: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");
答案 1 :(得分: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();
}