简体   繁体   English

在ASP.NET MVC中以表单顺序枚举发布的数据

[英]Enumerating posted data in form order in ASP.NET MVC

Order entry form from Windows CE 6 contains fields with duplicate column names. Windows CE 6中的订单输入表单包含具有重复列名的字段。 This data needs to be enumerated in ASP.NET MVC4 application in post controller. 此数据需要在Post Controller中的ASP.NET MVC4应用程序中枚举。

Column names are not known in the controller, since the form is created at runtime from user-defined data. 列名在控制器中未知,因为表单是在运行时根据用户定义的数据创建的。

I tried code below, but it returns comma separated values for duplicate names. 我在下面尝试了代码,但是对于重复的名称,它返回逗号分隔的值。

How to get every posted key/value pair separately in the order which they appear in the form? 如何按表单中出现的顺序分别获取每个发布的键/值对? Data can also be posted in json format using jquery, if that can solve the issue. 如果可以解决问题,也可以使用jquery以json格式发布数据。

Observed result: 观察结果:

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

Expected result: 预期结果:

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

View: 视图:

<!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>

Controller: 控制器:

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

Output: 输出:

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

The only thing left for you to do is to reorder the parameters to 剩下要做的唯一一件事就是将参数重新排序为

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM