如何通过嵌套视图建模从视图到控制器的绑定
How to model bind from view to controller via nested view
我似乎无法将员工 ID 值从 Employees.cshtml 视图中的复选框传递到 Delete Post 操作方法。删除操作方法 returns Delete.cshtml 视图呈现 Employees.cshtml ,就像在 Shared 文件夹下的 EditorTemplates 文件夹中一样。当我单击提交时,我似乎无法通过已检查的 @Model.Ids.
的 IEnumerable
我想要做的是删除每个已检查的条目,其中检查的值来自 Employees.cshtml。
显然问题是模型绑定(我认为)将通过 Delete.cshtml 页面的按钮提交完成,我该如何更改?
删除操作方法。
[HttpGet]
public ActionResult Delete()
{
return View(db2.Employees.ToList());
}
删除 Post 操作方法。
[HttpPost]
public ActionResult Delete(IEnumerable<int> EmployeeIDToDelete)
{
if (EmployeeIDToDelete != null)
{
var employeesToDelete = db2.Employees.Where(x => EmployeeIDToDelete.Contains(x.Id)).ToList();
foreach (var item in employeesToDelete)
{
db2.Employees.Remove(item);
}
db2.SaveChanges();
RedirectToAction("Delete");
}
return View(db2.Employees.ToList());
}
我的删除视图
@model IEnumerable<MVC_Example2___ADO.Models.Employees>
@{
ViewBag.Title = "Delete";
}
<html>
<body>
@using (Html.BeginForm())
{
<table align="center">
<thead>
<tr>
<td>Check</td>
<td>Photo</td>
<td>Name</td>
<td>Gender</td>
</tr>
</thead>
<tbody>
@Html.EditorForModel()
</tbody>
</table>
<input type="submit" name="submit" value="Delete Entries" />
}
</body>
</html>
我的员工视图
@model MVC_Example2___ADO.Models.Employees
<tr>
<td><input type="checkbox" name="employeeIdsToDelete" id="employeeIdsToDelete" value="@Model.Id" /></td>
<td>@Html.Image(@Model.Photo, @Model.AlternateText, 125, 130)</td>
<td>@Model.FullName</td>
<td>@Model.Gender</td>
</tr>
您已将复选框命名为 name="employeeIdsToDelete"
,但 POST 方法的参数是 IEnumerable<int> EmployeeIDToDelete
(不是复数)。名称必须匹配。
另请注意,您应该从输入中删除 id="employeeIdsToDelete"
,因为这会生成无效的重复 id
属性 html。
我似乎无法将员工 ID 值从 Employees.cshtml 视图中的复选框传递到 Delete Post 操作方法。删除操作方法 returns Delete.cshtml 视图呈现 Employees.cshtml ,就像在 Shared 文件夹下的 EditorTemplates 文件夹中一样。当我单击提交时,我似乎无法通过已检查的 @Model.Ids.
的 IEnumerable我想要做的是删除每个已检查的条目,其中检查的值来自 Employees.cshtml。
显然问题是模型绑定(我认为)将通过 Delete.cshtml 页面的按钮提交完成,我该如何更改?
删除操作方法。
[HttpGet]
public ActionResult Delete()
{
return View(db2.Employees.ToList());
}
删除 Post 操作方法。
[HttpPost]
public ActionResult Delete(IEnumerable<int> EmployeeIDToDelete)
{
if (EmployeeIDToDelete != null)
{
var employeesToDelete = db2.Employees.Where(x => EmployeeIDToDelete.Contains(x.Id)).ToList();
foreach (var item in employeesToDelete)
{
db2.Employees.Remove(item);
}
db2.SaveChanges();
RedirectToAction("Delete");
}
return View(db2.Employees.ToList());
}
我的删除视图
@model IEnumerable<MVC_Example2___ADO.Models.Employees>
@{
ViewBag.Title = "Delete";
}
<html>
<body>
@using (Html.BeginForm())
{
<table align="center">
<thead>
<tr>
<td>Check</td>
<td>Photo</td>
<td>Name</td>
<td>Gender</td>
</tr>
</thead>
<tbody>
@Html.EditorForModel()
</tbody>
</table>
<input type="submit" name="submit" value="Delete Entries" />
}
</body>
</html>
我的员工视图
@model MVC_Example2___ADO.Models.Employees
<tr>
<td><input type="checkbox" name="employeeIdsToDelete" id="employeeIdsToDelete" value="@Model.Id" /></td>
<td>@Html.Image(@Model.Photo, @Model.AlternateText, 125, 130)</td>
<td>@Model.FullName</td>
<td>@Model.Gender</td>
</tr>
您已将复选框命名为 name="employeeIdsToDelete"
,但 POST 方法的参数是 IEnumerable<int> EmployeeIDToDelete
(不是复数)。名称必须匹配。
另请注意,您应该从输入中删除 id="employeeIdsToDelete"
,因为这会生成无效的重复 id
属性 html。