Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

c#

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?

like image 436
Robert Harvey Avatar asked Jun 08 '09 20:06

Robert Harvey


People also ask

What is strongly binding in MVC?

The view which binds to a specific type of ViewModel is called as Strongly Typed View. By specifying the model, the Visual studio provides the intellisense and compile time checking of type. We learnt how to pass data from Controller to View in this tutorial. This is usually done using the ViewBag or ViewData.

How data binding can be used in ASP NET MVC?

ASP.NET MVC model binding allows mapping HTTP request data with a model. It is the procedure of creating . NET objects using the data sent by the browser in an HTTP request. Model binding is a well-designed bridge between the HTTP request and the C# action methods.

Does MVC use data binding?

asp.net mvc supports data binding. You can bind data to some model and post it back when the form is submitted.


1 Answers

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

like image 159
Thomas Stock Avatar answered Oct 09 '22 02:10

Thomas Stock