Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Complex model binding to a list

I have been trying out the NameValueDeserializer from MVCContrib, which will take a IList as a parameter to a controller and bind a form and its elements to it, but I was just wondering if MVC Beta had any way of doing this??

I know you can bind a strongly typed Object but I want to bind a List of these Objects for some bulk editing situations.

eg.

public void Save(IList<Item> items)
{
    foreach (Item i in items)
    {
        //Save item
    }
}

Is this possible in MVC Beta?? Thanks in Advance.

like image 485
Schotime Avatar asked Oct 23 '08 22:10

Schotime


People also ask

What is model binder?

Model binding is a process in which we bind a model to controller and view. It is a simple way to map posted form values to a . NET Framework type and pass the type to an action method as a parameter. It acts as a converter because it can convert HTTP requests into objects that are passed to an action method. Example.

Which variable does model binding depend on?

Now the magic of Model Binding depends on the id of HTML variables that are supplying the values. For our Employee Model, the id of the HTML input fields should be the same as the Property names of the Employee Model and you can see that Visual Studio is using the same property names of the model while creating a view.


1 Answers

Yes it is, I wrote a detailed blog post about it here. It's really easy for simple types. For complex types, you'd need to do something like:

<input type="hidden" name="products.Index" value="0" />
<input type="text" name="products[0].Name" value="Beer" />
<input type="text" name="products[0].Price" value="7.32" />

<input type="hidden" name="products.Index" value="1" />
<input type="text" name="products[1].Name" value="Chips" />
<input type="text" name="products[1].Price" value="2.23" />

<input type="hidden" name="products.Index" value="2" />
<input type="text" name="products[2].Name" value="Salsa" />
<input type="text" name="products[2].Price" value="1.23" />
like image 50
Haacked Avatar answered Oct 20 '22 00:10

Haacked