I have an object that has a few different List properties that contain child objects.
I’m trying to wrap my head around the best way for the user to select and add these child objects from a New view (where I’m creating a new instance of the parent object).
As an example, suppose I have a Project class and a “New” ViewPage that presents the user with the form to create a new Project. On this form, the user can supply data for the basic properties (no problems there) and then there is an area that allows the user to add ProjectExpense objects to this new Project. For each project expense, the user selects the category of the expense, a line item value, maybe a quantity. When the user wants to add more than one expense, we allow him to do so by providing a nice little jQuery row clone that gives him a new line to work with.
Where I stumble is how to get that data back to the Create action when the form is submitted. Right now, I’m trying to parse through an unknown number of these ProjectExpense rows, which is painful. It seems a better option might be to store the ProjectExpense object in some sort of Session or TempData bag on the server every time they add a line. Then in the action, we grab that bag and attach it to the parent object and persist as normal.
Any thoughts on how others are doing this kind of work?
You can easily bind these new rows of values to IList. Haacked has a post about such possibility but it’s a bit out of date. But there are a lot of useful and up to date information in comments. In my opinion that post describes this possibility much better in comparison with post of jeloff (the link you’ve provided in comment).
So you’ll need just to change a JS code which adds a ProjectExpense row to set appropriate names and use IList binding in your controller method. And you’ll not need in some custom JS to gather all values and add them to the some hidden field and so on. This feature already works out of box.
UPDATE: Just found one more good link about this http://blog.codeville.net/2008/12/22/editing-a-variable-length-list-of-items-in-aspnet-mvc/