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?
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.
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.
asp.net mvc supports data binding. You can bind data to some model and post it back when the form is submitted.
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 :-)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With