似乎很多人都有这个问题,但我还没有找到解决方案。
我首先将门票发送到我的视图
[HttpGet]
public ActionResult AddPopcorn()
{
List<Ticket> tickets = new List<Ticket>();
// Fill the list with tickets
return View("AddPopcorn", tickets);
}
在视图中,我使用表单和复选框显示票证。视图正确显示票证。
@model List<Domain.Entities.Ticket>
@{
ViewBag.Title = "AddPopcorn";
}
<body>
// Html stuff
@using (Html.BeginForm("AddPopcorn", "Ticket", FormMethod.Post))
{
<table>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.TicketID)
</td>
<td>
@Html.DisplayFor(modelItem => item.Price)
</td>
<td>
@Html.DisplayFor(modelItem => item.TicketType)
</td>
<td>
@Html.CheckBoxFor(modelItem => item.Popcorn)
</td>
</tr>
}
</table>
<input type="submit" value="Voeg toe!" />
}
</div>
</body>
如果有人选中复选框,我想要价值&#39;爆米花&#39;是真实的。因此,我希望视图根据复选框返回包含爆米花更新值的故障单列表。
[HttpPost]
public ActionResult AddPopcorn(List<Ticket> model)
{
foreach (var item in model)
{
if (item.Popcorn == true)
{
item.Price = item.Price + 5;
}
}
return RedirectToAction("Payment", "Payment");
}
但是,返回到AddPopcorn的模型为null。我似乎无法弄明白为什么。
答案 0 :(得分:1)
尝试将foreach
循环更改为for
:
for (int i = 0; i < Model.Count; i++)
{
<tr>
<td>
@Html.DisplayFor(x => Model[i].TicketID)
</td>
<td>
@Html.DisplayFor(x => Model[i].Price)
</td>
// etc
<td>
@Html.CheckBoxFor(x => Model[i].Popcorn)
</td>
</tr>
}
默认模型绑定器使用特定约定来计算如何绑定项列表,例如Model[0].Popcorn
(名称)。您可以检查CheckBox的HTML是否将name
属性设置为该格式。
除了使用for
之外,您还可以为EditorTemplate
对象指定自定义Ticket
。
答案 1 :(得分:0)
这是因为您的表单实际上并未将任何数据发回给控制器。
您需要输入元素才能真正从表单中检索数据。
相反,在控制器上,以这种方式访问模型:
var model = this.Model
表单将仅发送您在输入标记中获得的数据,例如
<input type="text" name="first_name" />