在 MVC 中按窗体顺序枚举 ASP.NET 发布的数据

本文关键字:NET 数据 ASP 枚举 MVC 窗体 顺序 | 更新日期: 2023-09-27 18:35:12

Windows CE 6 中的订单条目表单包含具有重复列名的字段。此数据需要在后控制器 ASP.NET MVC4 应用程序中枚举。

控制器中不知道列名,因为表单是在运行时从用户定义的数据创建的。

我尝试了下面的代码,但它返回了重复名称的逗号分隔值。

如何按照每个发布的键/值对在表单中出现的顺序分别获取它们?数据也可以使用jquery以json格式发布,如果这可以解决问题。

观察到的结果:

id=1,1,2
orderdate=2013-01-01
quantity=12.2,15

预期成果:

  id=1
  orderdate=2013-01-01
  id=1
  quantity=12.2
  id=2
  quantity=15

视图:

<!DOCTYPE html>
<html>
<body>
<form method='post' action='SaveOrder'>
Order id<input name='id' type='text' value='1' />
Date <input name='orderdate' type='date' value='2013-01-01'/>
Row 1 id <input name='id' type='text' value='1' />
Quantity <input name='quantity' type='text' value='12.2'/>
Row 2 id <input name='id' type='text' value='2'/>
Quantity <input name='quantity' type='text' value='15' />
<input type='submit' value='Save order'/>    
</form>
</body></html>

控制器:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SaveOrder(NameValueCollection form) 
{
    for (int i = 0; i < form.Count; i++)
        Console.WriteLine(form.GetKey(i)+"="+ form[i].ToString());
}

在 MVC 中按窗体顺序枚举 ASP.NET 发布的数据

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SaveOrder()
{
    foreach (string key in Request.Form.AllKeys)
    {
        foreach (string value in Request.Form.GetValues(key))
        {
            Debug.WriteLine("{0} = {1}", key, value);
        }
    }
    return View();
}

输出:

id = 1
id = 1
id = 2
orderdate = 2013-01-01
quantity = 12.2
quantity = 15

剩下您唯一要做的就是将参数重新排序为

id = 1
orderdate = 2013-01-01
id = 1
quantity = 12.2
quantity = 15
id = 2