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

dev*_*nkd 10 c# asp.net razor asp.net-mvc-5.1

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

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

视图

<div class="form-group">
    <label>Cupcakes</label>
    @foreach (var cupcake in Model.CupcakeList)
    {
        @Html.TextBox("CupcakeQuantities", cupcake.Id)  @cupcake.Name <br/>
    }
</div>
Run Code Online (Sandbox Code Playgroud)

模型

public List<Cupcake> CupcakeList { get; set; }
public List<int> CupcakeQuantities { get; set; }
Run Code Online (Sandbox Code Playgroud)

CONTROLLER

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

    return View(model);
}
Run Code Online (Sandbox Code Playgroud)

CUPCAKE(ENTITY)

public class Cupcake
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal PerDozen { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Gon*_*ing 31

您必须使用索引,而不是使用索引foreach.

@for (int i = 0; i < Model.CupcakeList.Count; i++)
{
    @Html.TextBoxFor(x=>Model.CupcakeQuantities[i]) @Model.CupcakeList[i].Name <br/>
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

例如

[HttpPost]
public ActionResult(PartyBookingModel model)
Run Code Online (Sandbox Code Playgroud)