C# 在ASP.NET MVC中绑定到强类型对象集合

C# 在ASP.NET MVC中绑定到强类型对象集合,c#,asp.net-mvc,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; } } 如果我理解,我应该能够创建一个呈现HTML的表单视图,如下所示: <input name="Person[0].id" value="

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

public class Person
{
    public int id { get; set }
    public string Name { get; set; }
    public double Rate { get; set; }
    public int Type { get; set; }
}
如果我理解,我应该能够创建一个呈现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
}

但它不起作用。数组变量始终为空。我将此解释为数据绑定不起作用。但是为什么呢?

您的字段应该命名为数组[0]。id,数组[0]。键入

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

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

你明白了:-)


应该是:

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


可能尝试使用常规列表而不是数组。尝试使用列表而不是Person[],仍然返回null。Hanselman模式需要Person[]。您是否调试并分析了POST数据,以验证数据是否按照Scott的文章发布?还没有,但数据将成功填充FormsCollection变量。我可以解析它,但这样我就完全绕过了绑定系统。表单标记是什么样子的?我花了大约10秒钟的时间查看了你发布的链接。。这是我们都知道又讨厌的盲点之一
<input name="array[0].Rate" value="40.0" type="text" />