2015-04-28 24 views
0

我似乎無法將Employees.cshtml視圖中的複選框傳遞給Delete Post操作方法的員工ID值。 delete action方法返回Delete.cshtml視圖,該視圖呈現Employees.cshtml,因爲它位於Shared文件夾下的EditorTemplates文件夾中。當我點擊提交時,我似乎無法通過IEnumerable的checked @ Model.Ids。如何通過嵌套視圖建模從視圖到控制器

我想要做的是刪除已在Employees.cshtml中導出選中的值的所有項。

很明顯,問題是模型綁定(我認爲)將從Delete.cshtml頁面的按鈕提交完成,我該如何改變?

Delete操作方法。

[HttpGet] 
    public ActionResult Delete() 
    { 
     return View(db2.Employees.ToList()); 
    } 

Delete 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> 

回答

1

您已經命名自己的複選框name="employeeIdsToDelete"但你的POST方法的參數是IEnumerable<int> EmployeeIDToDelete(不是複數)。名字必須匹配。

另請注意,您應該從輸入中刪除id="employeeIdsToDelete",因爲這會生成重複的id屬性,該屬性是無效的html。

+0

由於控制器操作的參數是一個IEnumerable,我相信他也需要索引他的名字屬性。 – Tobias

+0

@Tobias,它不需要值類型。 'DefaultModelBinder'仍然會綁定它。但是,一如往常,首選的方法是使用'bool IsSelected'屬性和'@CheckBoxFor(m => m.IsSelected)'使用'' –

+0

@Stephen Muecke當然是!非常感謝你! –

相關問題