将数据从HTML表单通过数组传递到$ _POST

时间:2014-03-09 07:07:59

标签: html asp.net asp.net-mvc post razor

以下是用ASP.NET Razor编写的。

我有一个页面,可以根据数据库查询的结果动态创建HTML表单中的行。结果集中的每一行对应于表单中的一行。每行有两个输入字段,我需要通过$ _POST传递。

foreach (var @row in list) {
    <li>
        <span style="width: 100px; display: inline-block">@row.Name</span>
        <input type="text" name="time[]" />minutes on
        <input type="text" name="date[]" />
    </li>
}

我的期望是,我可以像这样访问和迭代数据:

var timeList = Request.Form["time"];
foreach (var time in timeList) {
    // Stuff
}

但这不起作用。我不断为timeList获取“对象引用未设置为对象的实例”错误。我正在努力做甚么可能吗?知道什么是错的吗?

2 个答案:

答案 0 :(得分:1)

尝试从名称中删除方括号:

foreach (var @row in list) {
    <li>
        <span style="width: 100px; display: inline-block">@row.Name</span>
        <input type="text" name="time" />minutes on
        <input type="text" name="date" />
    </li>
}

循环将创建重复的名称,这些名称在HTML中形成数组,因此您可以获得所需的内容。但是,我不确定当列表中有一个项目时是否可行,所以测试一下。

答案 1 :(得分:0)

客户端HTML:

<form action="~/Page" method="post">
    <input type="hidden" name="product_0_id" value="0" />
    <input type="text" name="product_0_name" value="Prod. #1" />
    <input type="hidden" name="product_1_id" value="1" />
    <input type="text" name="product_1_name" value="Prod. #2" />
</form>

服务器:

 string youGroupKey = "product";
 Dictionary<string, string>[] values = Request.Form
     .AllKeys
     .Where(k => k.StartsWith(youGroupKey))
     .GroupBy(k => k
         .Substring(youGroupKey.Length + 1, 1),
             (a, b) => {
                 return b
                     .ToDictionary(c => c
                         .Substring(youGroupKey.Length + 3), d => Request.Form[d]);
             }
      )
      .ToArray();