我可以循环收集Collection.Request.Form吗?

时间:2011-01-26 17:25:30

标签: c# .net asp.net asp.net-mvc

我有一些带有唯一ID的复选框。是否可以在表单集合中找到所有复选框+ uniquenum?

之类的东西 -

foreach (var item in Collection.Request.Form["checkbox" + with UniqueIDNum])
{
    //code
}

5 个答案:

答案 0 :(得分:39)

没有

相反,您可以遍历所有密钥,并检查它们是否以checkbox开头。

例如:

foreach(string key in Request.Form) {
    if (!key.StartsWith("checkbox")) continue;
    ...
}

NameValueCollection enumerator将字符串作为字符串返回。

答案 1 :(得分:4)

或类似的东西

var checkBoxes = Request.Form.Keys.Where(rs=>rs.StartsWith("dummy"));
foreach(string key in checkBoxes){
 // Your code
}

答案 2 :(得分:1)

您应该可以使用Linq(这应该工作,尚未测试): 我还假设复选框的ID是“复选框[ID]”。顺便说一句,表单字段中的重复ID是糟糕的坏事。

var checkboxes = (from key in Request.Form.AllKeys where key = "checkbox" + UniqueIDNum)
foreach(string key in checkboxes)
{
     //do stuff
}

答案 3 :(得分:1)

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Index(FormCollection fc)
        {   
            string a = fc["hdn_1"].ToString(); // if you know for sure that it will have a value.
            string lbl_1 = null;

            foreach (var key in fc.AllKeys)
            {
                if (key.Contains("txt_1"))
                {
                    lbl_1 = fc["txt_1"].ToString();
                }
            }
         }

希望这有帮助。

答案 4 :(得分:0)

我不得不在 VB.NET 中做到这一点,在多年没有使用 VB.NET 之后甚至没有太多使用它之后,我使用了 Josh Wolf 的答案来获得以下内容:

Dim checkedOrders As IEnumerable(Of String) = From key In Request.Form.AllKeys Where key.StartsWith("chk")

If checkedOrders.Count > 0 Then
   ' do stuff, loop through checkedOrders, etc
End If

请注意,我的复选框都以名称中的“chk”开头(例如“chk1038”、“chk1040”等)。