简体   繁体   中英

Binding to a Collection of Strongly-Typed Objects in ASP.NET MVC

I have a data class that contains a number of fields:

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

If I understand Scott Hanselman's take on binding arrays of objects , I should be able to create a form view that renders HTML that looks like this:

<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>

I should then be able to capture this data in my controller with an action method that looks like this:

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

But it doesn't work. The array variable is always null. I interpret this as the data binding is not working. But why?

Your fields should be named array[0].id, array[0].Type, ...

They should have the name of the array instance, not the name of the Type inside the array.

Alternatively you could change the signature of the actioncontroller to: Person[] Person

You get the point :-)

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

应该:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM