我可以将多个模型实例以相同的形式传递给控制器​​吗?

时间:2012-02-19 05:05:08

标签: asp.net-mvc asp.net-mvc-3

我有一个MVC视图,可将多个模型发布回控制器。我要求添加允许用户从同一表单添加X个“Infractions”的功能。我可以将我想要做的事情与将“Infractions”对象的IEnumerable发布回控制器进行比较。如果有某种方法可以做到这一点,那就太棒了:

[HttpPost]
public ActionResult Create(IEnumerable<Infractions> infractions)

然后我会迭代IEnumerable并添加违规行为。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

这绝对是可能的。有关此问题,请参阅Phil Haack's post

诀窍是以正确的格式呈现初始get属性名称,以便模型绑定器将其识别为列表/数组。

例如:

<input type='text' name='[0].Property1OnInfractions' />
<input type='text' name='[0].Property2OnInfractions' />

<input type='text' name='[1].Property1OnInfractions' />
<input type='text' name='[1].Property2OnInfractions' />


在您的情况下,您必须将您的IEnumerable转换为IList以使以下工作:

@for(int i = 0; i < Model.Count(); i++)
{
    @Html.TextBoxFor(m => m[i].Property1OnInfractions)
    @Html.TextBoxFor(m => m[i].Property2OnInfractions)
}

动作签名应如下所示

[HttpPost]
public ActionResult Create(List<Infractions> infractions)