当模型绑定集合时参数名称为“索引”时的模型绑定问题

时间:2012-11-09 16:23:03

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

我的控制器操作在这里:

[HttpPost]
public ActionResult Index(List<Widget> widgets, int index)
{
    widgets.RemoveAt(index);
    return View(widgets);
}

我对这个动作的帖子如下:

[0].Name    a
[1].Name    b
[2].Name    c
index   1

当我调试时,我发现列表中只有一个项目。我可以通过将参数名称从索引更改为_index来解决问题。

我找不到索引是保留字的任何内容。有没有想过为什么会这样?

1 个答案:

答案 0 :(得分:1)

Mvc模型绑定可以通过将连续索引绑定到集合中的项目来处理列表,如示例所示。

但是,您可以使用任何给定的密钥获取mvc绑定,它通过使用名为index的具有相同特异性的表单字段来完成此操作。

E.g。

 A.index = "aaa"
 A[aaa].name = "hello"
 A.index = "bbb"
 A[bbb].name = "world"

Phil haack给出了一个很好的教程 http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

Mvc可能会在这一点上感到困惑并试图调用这种类型的绑定