Ich möchte Bilder für Galerie und Hauptseite in meiner Website hochladen, so ich Bild in Dateisystem hochladen und Info abvout Bilder in db speichern, verwende ich eine zu viele Beziehung in der Datenbank und ich benutze View Model. Alle Daten Updates in der Datenbank ohne Problem, ich habe es überprüft, aber ich kann nicht Bilder in der Ansicht anzeigen, vielleicht muss ich etwas anderes in meiner Methode Edit ?? Bitte erkläre mich. So, hier ist mein Code: Ansicht ModelleKann das Bild nicht aus der Datenbank anzeigen View Model
public class FurnitureVM
{
public FurnitureVM()
{
this.MainImage = new ImageVM();
this.SecondaryImages = new List<ImageVM>();
}
public int? ID { get; set; }
[Display(Name = "Name")]
[Required(ErrorMessage = "Enter name")]
public string Name { get; set; }
[DataType(DataType.MultilineText)]
[Display(Name = "...")]
[Required(ErrorMessage = "...")]
public string Description { get; set; }
[Display(Name = "Price()")]
[Required]
[Range(0.01, double.MaxValue, ErrorMessage = "...")]
public decimal Price { get; set; }
[Display(Name = "...")]
[Required(ErrorMessage = "...")]
public string Manufacturer { get; set; }
[Display(Name = "Size")]
[Required(ErrorMessage = "...")]
public string Size { get; set; }
[Display(Name = "....")]
[Required]
public int CategoryId { get; set; }
public virtual Category Category { get; set; }
public IEnumerable<SelectListItem> CategoryList { get; set; }
public HttpPostedFileBase MainFile { get; set; }
public IEnumerable<HttpPostedFileBase> SecondaryFiles { get; set; }
public ImageVM MainImage { 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; }
}
Meine Methode in der Steuerung:
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
var furniture = db.Furnitures.Find(id);
if (furniture == null)
{
return HttpNotFound();
}
FurnitureImages main = furniture.Images.Where(x => x.IsMainImage).FirstOrDefault();
FurnitureVM model = new FurnitureVM();
model.Name = furniture.Name;
model.Description = furniture.Description;
model.Price = furniture.Price;
model.Size = furniture.Size;
model.CategoryId = furniture.CategoryId;
model.Manufacturer = furniture.Manufacturer;
model.MainImage.Id = main.Id;
model.MainImage.DisplayName = main.DisplayName;
model.MainImage.Path = main.Path;
model.MainImage.IsMainImage = main.IsMainImage;
//ViewBag.CategoryId = new SelectList(db.Categories, "CategoryId", "Name", furniture.CategoryId);
return View(model);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(FurnitureVM model)
{
if (model.MainFile != null && model.MainFile.ContentLength > 0)
{
string displayName = model.MainFile.FileName;
string extension = Path.GetExtension(displayName);
string fileName = string.Format("{0}.{1}", Guid.NewGuid(), extension);
string path = Path.Combine(Server.MapPath("~/Upload/"), fileName);
model.MainFile.SaveAs(path);
model.MainImage = new ImageVM() { Path = path, DisplayName = displayName };
}
foreach (HttpPostedFileBase file in model.SecondaryFiles)
{
FurnitureImages images = new FurnitureImages
{
//This is for secondary images for gallery
};
}
if (!ModelState.IsValid)
{
model.CategoryList = new SelectList(db.Categories, "CategoryId", "Name",model.CategoryId); // repopulate the SelectList
return View(model);
}
Furniture furniture = db.Furnitures.Where(x => x.FurnitureId == model.ID).FirstOrDefault();
FurnitureImages main = furniture.Images.Where(x => x.IsMainImage).FirstOrDefault();
furniture.Name = model.Name;
furniture.Description = model.Description;
furniture.Manufacturer = model.Manufacturer;
furniture.Price = model.Price;
furniture.CategoryId = model.CategoryId;
furniture.Size = model.Size;
main.Id = model.ID;
main.DisplayName = model.MainImage.DisplayName;
main.Path = model.MainImage.Path;
main.IsMainImage = model.MainImage.IsMainImage;
if (model.MainImage != null && !model.MainImage.ID.HasValue)
{
FurnitureImages image = new FurnitureImages
{
Path = model.MainImage.Path,
DisplayName = model.MainImage.DisplayName,
IsMainImage = true
};
furniture.Images.Add(image);
}
// ViewBag.CategoryId = new SelectList(db.Categories, "CategoryId", "Name", furniture.CategoryId);
db.Entry(furniture).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
und ein Teil meiner Ansicht
@model FurnitureStore.ModelView.FurnitureVM
...
@if (Model.MainImage != null)
{
@Html.HiddenFor(m => m.MainImage.ID)
@Html.HiddenFor(m => m.MainImage.Path)
@Html.HiddenFor(m => m.MainImage.DisplayName)
<img src="@Model.MainImage.Path" alt="@Model.MainImage.DisplayName" />
}
@Html.TextBoxFor(m => m.SecondaryFiles, new { type = "file", multiple = "multiple" })
@Html.ValidationMessageFor(m => m.SecondaryFiles)
@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="@Model.SecondaryImages[i].Path" alt="@Model.MainImage.DisplayName" />
}
können Sie zeigen, wie der Pfad wie in der Datenbank sucht, die gespeichert wird, ist es relativ Weg? –
@Ehsan Sajjad D: \ Visualstudio2015 \ MöbelStore \ FurnitureStore \ Upload \ 4b44e4ce-59fc-4ba5-8f1d-719e1e8b1006..jpg wie mein Pfad aussieht –
Beachten Sie die 'Path.GetExtension (displayName);' gibt '.jpg' zurück (enthält den Punkt) so sollte es nur sein 'string fileName = string.Format (" {0} {1} ", Guid.NewGuid(), Erweiterung);' –