ASP.NET MVC 4 – per le proprietà di raccolta dei modelli di post del ciclo ma foreach no

Dì che ho i seguenti modelli:

public class Person { public string Name { get; set; } public int Age { get; set; } } public class Town { public string Name { get; set; } public IEnumerable People { get; set; } } 

Poi, nella mia vista Razor, ho questo:

 @model Town @using(Html.BeginForm()) {  @foreach(var person in Model.People) {  } 
@Html.TextBoxFor(m => person.Name) @Html.TextBoxFor(m => person.Age)
}

Quindi, ho un’azione per il POST, qualcosa del genere:

 [HttpPost] public ActionResult Index(Town theTown) { //.... } 

Quando inserisco, IEnumerable non si presenta. Se lo guardo in Fiddler, la raccolta viene pubblicata una sola volta e non enumera la raccolta, quindi ottengo:

 People.Name = "whatever" People.Age = 99 

Tuttavia, se cambio People in un IList e utilizzo un ciclo for invece di un foreach …

 @for(var i = 0;i < Model.People.Count;i++) { 
}

Funziona. Sto facendo qualcosa di sbagliato? Cosa mi manca?

il problema non è con l’object IEnumerable o IList è come il rendering della raccolta nella visualizzazione.

 @for(var i = 0;i < Model.People.Count;i++) { 
}

Osserva che con ogni elemento della lista si aggiunge un indice continuo che consente al raccoglitore del modello di fare la sua magia

Una buona lettura

Tutto quello che mancava era piazzare var al posto del Modello stesso (Persone) come sotto

 
@Html.TextBoxFor(m => Model.People[i].Name) @Html.TextBoxFor(m => Model.People[i].Age)
@Html.TextBoxFor(m => Model.People[i].Name) @Html.TextBoxFor(m => Model.People[i].Age)
@foreach(People person in Model.People) { }
@Html.TextBoxFor(m => person.Name) @Html.TextBoxFor(m => person.Age)