用于列表项的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 }