Asp.net razor textbox array for list items

前端 未结 2 880
无人共我
无人共我 2020-12-11 01:31

I can\'t find or figure out how to take a list of items (cupcakes) and display them in razor with a quantity field.

What is happening is I am not able to get the va

相关标签:
2条回答
  • 2020-12-11 02:21

    Try it this way:

    view:

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

    model:

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

    controller:

    public ActionResult Create()
    {
        var model = db.Cupcakes.Select(c => new CupcakeViewModel {
                                                    Id = c.Id,
                                                    Name = c.Name,
                                                    Quantity = 0 
                               })
                               .ToList();
    
        return View(model);
    }
    
    [HttpPost]
    public ActionResult Create(CupcakeViewModel[] cakes)
    {
         //Save choosen cakes
    }
    
    0 讨论(0)
  • 2020-12-11 02:23

    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:

    e.g.

    [HttpPost]
    public ActionResult(PartyBookingModel model)
    
    0 讨论(0)
提交回复
热议问题