razor textbox array for list items

Try it this way:


@for (int i = 0; i < Model.Count; i++)
    @Html.HiddenFor(x=>Model[i].Id) @Model[i].Name  
    @Html.TextBoxFor(x => Model[i].Quantity) <br/>


public class CupcakeViewModel
   public int Id {get;set;}
   public string Name {get;set;}
   public int Quantity {get;set;}   


public ActionResult Create()
    var model = db.Cupcakes.Select(c => new CupcakeViewModel {
                                                Id = c.Id,
                                                Name = c.Name,
                                                Quantity = 0 

    return View(model);

public ActionResult Create(CupcakeViewModel[] cakes)
     //Save choosen cakes

You have to use an index, rather than foreach for it to work.

@for (int i = 0; i < Model.CupcakeList.Count; i++)
    @Html.TextBoxFor(x=>Model.CupcakeQuantities[i]) @Model.CupcakeList[i].Name <br/>

This will create sequentially named+number entries that will be recombined back into the model on post back.

I realise this may seem like "why doesn't foreach work?", but with foreach there is not enough reflected information available to TextBoxFor (as it is just a single object), whereas the array index is extracted by reflection from the Model.CupcakeQuantities[i] expression.

The receiving controller method should take the same as the model passed to the view:


public ActionResult(PartyBookingModel model)