Estoy tratando de hacer que mi vista vuelva a publicar una lista para la acción, pero sigue apareciendo como nula.Publicando en una lista <modeltype> MVC3
Entonces mi modelo tiene una lista de objetos WeightEntry.
Ejercicio Modelo
public class Exercise
{
public List<WeightEntry> Entries { get; set; }
public int ExerciseID { get; set; }
public int ExerciseName { get; set; }
}
WeightEntry Modelo
public class WeightEntry
{
public int ID { get; set; }
public int Weight { get; set; }
public int Repetition { get; set; }
}
Mi Vista contiene el ExerciseName y una forloop de WeightEntry objetos
@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" />
}
la acción del controlador (Post) no hace nada en el momento. Solo estoy intentando que el enlace funcione antes de agregar el código de guardado.
[HttpPost]
public ActionResult WeightEntry(Exercise exercise)
{
try
{
//Add code here to save and check isvalid
return View(exercise);
}
catch
{
return View(exercise);
}
}
he visto unos pequeños trucos con la adición de un numerador a los nombres de los elementos del formulario utilizados en MVC2 pero me preguntaba si MVC3 era diferente? Esperaba que todo se vincule muy bien con ID's siendo 0 o nulo, pero en cambio toda la lista es nula cuando la inspecciono después de las publicaciones del formulario. Cualquier ayuda es apreciada. Gracias.
¿Por qué el foreach termina devolviendo nulo para la colección? – Coops
@CodeBlend, observe los atributos 'name' de los campos de entrada en el HTML generado y compárelo en ambos casos. Luego lea el ['siguiente artículo'] (http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx) y comprenderá por qué funciona con' for' y no funciona con 'foreach'. –
Mierda, eso funcionó. ¿A dónde envío la cerveza? –