我有一个视图,它接收IEnumerable<User>
,并为每个用户提供一个编辑器,页面底部有一个保存按钮。我的帖子操作采用IEnumerable<User>
但由于某种原因,此值始终为空。
这是我的观点(缩短)
@model IEnumerable<User>
@using (Html.BeginForm("ViewUsers", "Admin", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Username)
</td>
<td>
@Html.EditorFor(modelItem => item.IsAdmin)
</td>
<td>
@Html.EditorFor(modelItem => item.GoldCoins)
</td>
</tr>
}
<tr><td><input type="submit" value="Save"/></td></tr>
}
我的行动:
public ActionResult ViewUsers()
{
IEnumerable<User> users = userService.GetUsers();
return View(users.ToList());
}
[HttpPost]
public ActionResult ViewUsers(List<User> users)
{
foreach (User u in users)
{
userService.Save(u);
}
return RedirectToAction("ViewUsers");
}
我知道save方法可以正常工作,因为它可以很好地处理单个实体。它会在循环中抛出错误,因为'users'为空。
答案 0 :(得分:0)
您需要使用编辑器HTML帮助程序,例如:
@model List<User>
@using (Html.BeginForm("ViewUsers", "Admin", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@for (int i = 0; i < Model.Count; i++) {
@Html.DisplayFor(m => m[i].Username)
@:Is Admin: @Html.EditorFor(m => m[i].IsAdmin)
@:Gold Coins: @Html.EditorFor(m => m[i].GoldCoins)
}
<input type="submit" value="Save"/>
}
注意:我剥离了表格标签,使其更易于阅读。要点是,绑定到集合需要在表单中提交的名称/值的名称部分返回到服务器以遵循特定约定。 EditorFor(m =&gt; m [i] .IsAdmin)代码使名称成为MVC模型绑定器所期望的正确名称。