I want to display several images in my view . So I upload images to file system and information about images store in database. I have a table relation one to many ( Furniture
is primary table , FurnitureImages
where i save image's info). Also I use View model.
But images doesn't want to display because something wrong with passing parameter List<SecondaryImages>
in Edit GET method. I can't write model.SecondaryImages. = ...
because it is List
Here is my part of code.
Controller
public ActionResult Edit(int? id)
{
....
var furniture = db.Furnitures.Find(id);
FurnitureVM model = new FurnitureVM();
model.Name = furniture.Name;
.... // set other properties of the view model based on the data model
FurnitureImages main = furniture.Images.Where(x => x.IsMainImage).FirstOrDefault();
foreach(var i in model.SecondaryImages)
{
i.DisplayName = main.DisplayName;
i.Path = main.Path;
i.IsMainImage = main.IsMainImage;
}
return View(model);
}
Data models
public class Furniture
{
....
public virtual ICollection<FurnitureImages> Images { get; set; }
}
public class FurnitureImages
{
[Key]
public int Id { get; set; }
public string Path { get; set; }
public string DisplayName { get; set; }
public bool IsMainImage { get; set; } // this determines if its the main or secondary image
public int FurnitureId { get; set; } // navigation property
public virtual Furniture Furniture { get; set; }
}
View models
public class FurnitureVM
{
public FurnitureVM()
{
....
this.SecondaryImages = new List<ImageVM>();
}
....
public IEnumerable<HttpPostedFileBase> SecondaryFiles { get; set; }
public List<ImageVM> SecondaryImages { get; set; }
}
public class ImageVM
{
public int? Id { get; set; }
public string Path { get; set; }
public string DisplayName { get; set; }
public bool IsMainImage { get; set; }
}
View
@for (int i = 0; i < Model.SecondaryImages.Count; i++)
{
@Html.HiddenFor(m => m.SecondaryImages[i].Id)
@Html.HiddenFor(m => m.SecondaryImages[i].Path)
@Html.HiddenFor(m => m.SecondaryImages[i].DisplayName)
<img src="@Url.Content(Model.SecondaryImages[i].Path)" />
}
foreach(var images in model.SecondaryImages)
– M-Misha-M Feb 16 '17 at 00:51