Se per esempio voglio modificare una lista dei primi 5 user
codice:
public ActionResult EditPrimiCinque()
{
User user = db.User.Take(5).ToList();
return View(user);
}
[HttpPost]
public ActionResult EditPrimicinque(List<User> users)
{
if (ModelState.IsValid)
{
foreach(User u in users)
db.Entry(user).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(user);
}
Affinche questo funzioni il modelbinder deve poter capire attraverso le variabili POST che si vuole bindare una collection. A tal proposito il metodo EditorFor fa quasi tutto in automatico, solo bisogna rinunciare al foreach in favore del for nella view:
codice:
@for(int i = 0; i < Model.Count; i++) {
<tr>
<td>
@Html.EditorFor(m => m[i].Nome)
</td>
<td>
@Html.EditorFor(m => m[i].Cognome)
</td>
</tr>
In questo modo tutte le textbox avranno un attributo name univoco che permetterà (e segnalerà) al model binder di bindare l'intera lista di oggetti.