Este problema me ha estado plagando durante dos días. Hay algunas publicaciones similares, pero ninguna que solucione mi problema por completo.Modelo que contiene la lista de modelos (MVC-3, Razor)
Usando MVC-3, la maquinilla de afeitar sintaxis:
- EDIT.cshtml -
@using (Html.BeginForm("Edit", "My", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<!-- Some fields... -->
<div class="editor-field">
@Html.TextAreaFor(m => m.LongDescription)
@Html.ValidationMessageFor(m => m.LongDescription)
</div>
<!-- Some more fields work... Including picture upload (summary).-->
<input name="button" type="submit" value="Add Picture" />
<!-- Picture Item display -->
@foreach(var thumbnail in Model.ThumbnailImagePathAndNames)
{
<img src="@Url.Content(@thumbnail.ThumbnailPicturePath)" alt="" width="200" />
@Html.RadioButtonFor(o=>o.SelectedImage, @thumbnail.ImageGUID) Primary Picture
<!-- Checkbox to mark for deletion -->
@Html.CheckBoxFor(o=>thumbnail.Delete) Delete ???????? <!---- Here is a problem - I don't understand how this should work -->
}
<input id="Submit1" name="button" type="submit" value="Complete Edit!" />
}
- MyController.cs -
[HttpPost]
public ActionResult Edit(String button, HttpPostedFileBase file, MyMainModel model)
{
// if button = submit picture, work with picture here and break(long story)
// save model data
// if valid, save and redirect
// not valid or error, load up view like normal but with error messages
model.LoadThumbnails();
return View(model);
}
- MyMainModel.cs - -
public class MyMainModel
{
// some properties...
public Guid? SelectedImage { get; set; }
[Display(Name = "Detailed Description")]
public String LongDescription { get; set; }
// some more properties....
// and finally my list of models
public IList<ThumbnailModel> ThumbnailImagePathAndNames { get; set; }
public void LoadThumbnails()
{
// load up initial thumbnail models
this.ThumbnailImagePathAndNames = new List<ThumbnailModel>(readDataService.GetThumbnailModels(this.SomeID));
}
}
- MiniaturaModelo s.cs -
public class ThumbnailModel
{
public Guid ImageGUID { get; set; }
public String FullSizePicturePath { get; set; }
public String ThumbnailPicturePath { get; set; }
public bool Delete { get; set; }
}
¿Cuál es el problema? Bueno, cuando la "Edición completa!" se presiona el botón, se llama a Editar de MyController, como se esperaba, con todos los datos de MyMainModle intactos ... excepto por la lista de MiniaturaModelo, que resulta ser nula.
¿Cómo se supone que se debe hacer? He intentado muchos enfoques diferentes para esto, incluida la creación de una plantilla editable y el uso de EditFor (o => ... todo en vano (esto se volvió confuso ya que no sabía si se suponía que el EditFor era para toda la colección o simplemente un único elemento en la colección - Intenté en ambos sentidos). Todo solía funcionar hasta que agregué la complejidad de la casilla de verificación para su eliminación, por lo tanto, necesitaba recuperar la lista de MiniaturaModelos para verificar ese valor interno de la propiedad Eliminar
Gracias todos por leer y tratar de entender este
. [Renuncia -.. algunos nombres de variables y métodos han sido cambiados para proteger el programa inocente Una gran cantidad de código ha sido despojado de distancia y reemplazado por código comentario]
¿No debería ser 'thumbnail => thumbnail.Delete'? – Buildstarted