绑定到ASP.NET MVC中的强类型对象的集合

时间:2009-06-08 20:47:08

标签: c# asp.net-mvc

我有一个包含许多字段的数据类:

public class Person
{
    public int id { get; set }
    public string Name { get; set; }
    public double Rate { get; set; }
    public int Type { get; set; }
}

如果我理解Scott Hanselman's take on binding arrays of objects,我应该能够创建一个表单视图,呈现如下所示的HTML:

<input name="Person[0].id" value="26" type="hidden" />
<input name="Person[0].Name" value="Tom Smith" type="text" />
<input name="Person[0].Rate" value="40.0" type="text" />
<select name="Person[0].Type">
    <option selected="selected" value="1">Full Time</option>
    <option value="2">Part Time</option>
</select>

<input name="Person[1].id" value="33" type="hidden" />
<input name="Person[1].Name" value="Fred Jones" type="text" />
<input name="Person[1].Rate" value="45.0" type="text" />
<select name="Person[1].Type">
    <option value="1">Full Time</option>
    <option selected="selected" value="2">Part Time</option>
</select>

然后我应该能够使用如下所示的操作方法在我的控制器中捕获这些数据:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult People(Person[] array)
{
    // Do stuff with array
}

但它不起作用。数组变量始终为null。我解释这一点,因为数据绑定不起作用。但为什么呢?

2 个答案:

答案 0 :(得分:21)

您的字段应命名为array [0] .id,array [0] .Type,...

它们应该具有数组实例的名称,而不是数组中Type的名称。

或者,您可以将actioncontroller的签名更改为:     人[]人

你明白了这一点: - )

答案 1 :(得分:6)

<input name="Person[0].Rate" value="40.0" type="text" />

应该是:

<input name="array[0].Rate" value="40.0" type="text" />