无法显示图像从数据库使用视图模型
我想上传图片和主页在我的网站上的图像,所以我上传图像到文件系统,并保存信息abvout图像在数据库中,我使用一对多关系在数据库我也使用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; }
}
我的方法控制器:
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");
}
而且
@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" />
}
你不应该存储绝对路径在我的部分观点数据库,而是存储您需要更新以下代码行的相对路径:
string path = "~/Upload/"+ fileName;
model.MainFile.SaveAs(Server.MapPath(path));
现在在你看来,你将能够显示这样说:
<img src="@Url.Content(Model.MainImage.Path)" alt="@Model.MainImage.DisplayName" />
如果您不能修改路径保存逻辑和希望存储任何理由的绝对路径,那么你可以看看在下面的帖子:
你好,谢谢我接受它为asnwer,但你能帮助我,现在我不能显示次要图像,这就是我通过模型和我的观点http://pastebin.com/DpBsRB0a –
控制器侧看起来不错,您需要更改查看代码
,然后对事物的剩余部分出资应工作就像
<img src="@Url.Content(Model.MainImage.Path)" alt="@Model.MainImage.DisplayName" />
OR
<img src="@Url.Content(Model.SecondaryImages[i].Path)" alt="@Model.MainImage.DisplayName" />
好吧,我试过你的代码,现在我有一个异常,值不能为空,名称:contentPath。这个错误在你的代码的上面1行,在这里@ Html.HiddenFor(m => m.MainImage.DisplayName) –
可以呈现怎样的路径看起来像被存储在数据库,它是相对路径? –
@Ehsan Sajjad D:\ visualstudio2015 \ FurnitureStore \ FurnitureStore \ Upload \ 4b44e4ce-59fc-4ba5-8f1d-719e1e8b1006..jpg我的路径如何看起来像 –
注意'Path.GetExtension(displayName);''' (包括点),所以它应该只是'string fileName = string.Format(“{0} {1}”,Guid.NewGuid(),扩展名);' –