以下是用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获取“对象引用未设置为对象的实例”错误。我正在努力做甚么可能吗?知道什么是错的吗?
答案 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();