【问题标题】:Enumerating posted data in form order in ASP.NET MVC在 ASP.NET MVC 中按表单顺序枚举发布的数据
【发布时间】:2013-10-13 09:02:29
【问题描述】:

来自 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());
}

【问题讨论】:

  • JSON 将是您最好的选择。你也应该按照你期望的顺序得到它。您是否考虑过更改名称以更清楚地将项目组合在一起?
  • 不确定为什么 JSON 会更好。但是,如果只是更改名称,您应该得到您想要的结果,除了 id(s) 将不打印为 id=1,而是例如 id1 = 1、orderdate=2013-01-01、id2=1 等啊我想NameValueCollection 不对,是 FormValueCollection?
  • FormValueCollection 类型在 MVC 中不存在,为什么要写它。如果这是合理的,我可以解析数组或将名称更改为唯一名称或手动解析原始后缓冲区。我问希望找到更好的解决方案。

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


【解决方案1】:
[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

【讨论】:

  • 如何重新排列参数以形成 Tab 顺序:名称相同。在原始帖子数据中,它们以正确的顺序出现
  • Form.GetValues 按顺序返回键的值。您只需要记住 Form.GetValues("id")[0] 是订单 ID,Form.GetValues("id")[1] 是第一行 ID,依此类推。
  • 唯一的其他可能性是更改输入名称或自己解析帖子数据
猜你喜欢
  • 1970-01-01
  • 2011-05-27
  • 2017-01-18
  • 2023-04-09
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
相关资源
最近更新 更多