用于列表项的Asp.net razor文本框数组

我无法找到或弄清楚如何获取物品清单(纸杯蛋糕)并用数量字段显示在razor中。

发生的事情是我无法获得列表中每个蛋糕数量的值。 你能在Razor中做文本框数组吗?

视图

@foreach (var cupcake in Model.CupcakeList) { @Html.TextBox("CupcakeQuantities", cupcake.Id) @cupcake.Name
}

模型

 public List CupcakeList { get; set; } public List CupcakeQuantities { get; set; } 

CONTROLLER

 public ActionResult Create() { var model = new PartyBookingModel() { CupcakeList = db.Cupcakes.ToList(), CupcakeQuantities = new List() }; return View(model); } 

CUPCAKE(ENTITY)

 public class Cupcake { public int Id { get; set; } public string Name { get; set; } public decimal PerDozen { get; set; } } 

您必须使用索引,而不是foreach才能使用它。

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

这将创建顺序命名的+数字条目,这些条目将在回发后重新组合回模型。

我意识到这可能看起来像“为什么不TextBoxFor工作?”,但是对于foreach,没有足够的reflection信息可用于TextBoxFor (因为它只是一个单个对象),而数组索引是通过Model.CupcakeQuantities[i]的reflection提取的Model.CupcakeQuantities[i]表达。

接收控制器方法应与传递给视图的模型相同:

例如

 [HttpPost] public ActionResult(PartyBookingModel model) 

试试这种方式:

视图:

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

模型:

 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 }) .ToList(); return View(model); } [HttpPost] public ActionResult Create(CupcakeViewModel[] cakes) { //Save choosen cakes }