将原始标记绑定到MVC操作参数

时间:2014-12-09 21:37:11

标签: c# asp.net-mvc asp.net-mvc-5

报告模型有以下定义:

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将如何生成)?

1 个答案:

答案 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" />