Sto cercando di ottenere il mio punto di vista per pubblicare un elenco di nuovo all'azione, ma continua a venire come nulla.Inserimento in un elenco <modeltype> MVC3
Quindi il mio modello ha un elenco di oggetti WeightEntry.
Esercizio Modello
public class Exercise
{
public List<WeightEntry> Entries { get; set; }
public int ExerciseID { get; set; }
public int ExerciseName { get; set; }
}
WeightEntry Modello
public class WeightEntry
{
public int ID { get; set; }
public int Weight { get; set; }
public int Repetition { get; set; }
}
My View contiene l'ExerciseName e un forloop di WeightEntry oggetti
@model Mymvc.ViewModels.Exercise
...
<span>@Model.ExerciseName</span>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<table class="left weight-record">
<tr>
<th>Reps</th>
<th>Weight</th>
</tr>
@foreach (var item in Model.Entries)
{
<tr>
<td>
@Html.EditorFor(x => item.Repetition)
</td>
<td>
@Html.EditorFor(x => item.Weight)
</td>
</tr>
}
</table>
<input type="submit" value="Save" />
}
L'azione Controller (Post) Non fa niente alla momento. Sto solo cercando di far funzionare il binding prima di aggiungere il codice di salvataggio.
[HttpPost]
public ActionResult WeightEntry(Exercise exercise)
{
try
{
//Add code here to save and check isvalid
return View(exercise);
}
catch
{
return View(exercise);
}
}
Ho visto un paio di piccoli trucchi con l'aggiunta di un numeratore ai nomi degli elementi di forma utilizzati in MVC2 ma mi chiedevo se MVC3 era diverso? Speravo che tutto si sarebbe combinato bene con ID 0 o null, ma invece l'intero elenco è nullo quando lo controllo dopo i post del modulo. Qualsiasi aiuto è apprezzato. Grazie.
Perché il foreach finisce per restituire nulla per la raccolta? – Coops
@CodeBlend, osserva gli attributi 'name' dei campi di input nell'HTML generato e li confronta in entrambi i casi. Poi leggi il [seguente articolo] (http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx) e capirai perché funziona con 'for' e non funziona con 'foreach'. –
Santa merda - che funzionava davvero. Dove spedisco la birra? –