用于列表项的Asp.net razor文本框数组
本文关键字:razor 文本 数组 net Asp 列表 用于 | 更新日期: 2023-09-27 18:08:15
我无法找到或弄清楚如何将项目(纸杯蛋糕)列表显示在带有数量字段的razor中。
问题是我无法得到列表中每个纸杯蛋糕数量的值。你能在Razor中做文本框数组吗?
视图<div class="form-group">
<label>Cupcakes</label>
@foreach (var cupcake in Model.CupcakeList)
{
@Html.TextBox("CupcakeQuantities", cupcake.Id) @cupcake.Name <br/>
}
</div>
模型public List<Cupcake> CupcakeList { get; set; }
public List<int> CupcakeQuantities { get; set; }
控制器public ActionResult Create()
{
var model = new PartyBookingModel()
{
CupcakeList = db.Cupcakes.ToList(),
CupcakeQuantities = new List<int>()
};
return View(model);
}
蛋糕(实体)
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 <br/>
}
这将创建顺序命名的+number条目,这些条目将在post back时重新组合回模型中。
我意识到这可能看起来像"为什么不foreach工作?",但是foreach
没有足够的反射信息提供给TextBoxFor
(因为它只是一个对象),而数组索引是通过反射从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) <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
})
.ToList();
return View(model);
}
[HttpPost]
public ActionResult Create(CupcakeViewModel[] cakes)
{
//Save choosen cakes
}