报告模型有以下定义:
public class Report
{
public int Id { get; set; }
public string Name { get; set; }
public int Order { get; set; }
public string Description { get; set; }
}
现在,有一个JavaScript / jQuery代码,它生成以下标记并将其添加到表单中(在提交时):
<input type="hidden" value="..." name="Description[0]" />
<input type="hidden" value="..." name="Name[0]" />
<input type="hidden" value="..." name="Order[0]" />
<input type="hidden" value="..." name="Description[1]" />
<input type="hidden" value="..." name="Name[1]" />
<input type="hidden" value="..." name="Order[1]" />
..
..
<input type="hidden" value="..." name="Description[n]" />
<input type="hidden" value="..." name="Name[n]" />
<input type="hidden" value="..." name="Order[n]" />
我的行动如下:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Reports(IEnumerable<Report> reports)
{
// reports is null, even if I change the param type to: Report[] reports
}
我不想为此创建单独的ViewModel,只需要更改原始标记,因此它映射到参数。
还尝试使用name="Reports[0].Order"
,name="Reports[0].Name"
等更改标记,但这些值不会绑定到操作的参数。
有没有办法修改标记并使绑定工作,这样我们就不必更改控制器代码中的任何内容(模仿标记Razor将如何生成)?
答案 0 :(得分:2)
这应该可以正常工作:
<input type="hidden" value="..." name="[0].Description" />
<input type="hidden" value="..." name="[0].Name" />
<input type="hidden" value="..." name="[0].Order" />
<input type="hidden" value="..." name="[1].Description" />
<input type="hidden" value="..." name="[1].Name" />
<input type="hidden" value="..." name="[1].Order" />
..
..
<input type="hidden" value="..." name="[n].Description" />
<input type="hidden" value="..." name="[n].Name" />
<input type="hidden" value="..." name="[n].Order" />