ASP.MVC Редактирование изображений - PullRequest
0 голосов
/ 19 сентября 2019
    public ActionResult Edit([Bind(Include = "id,category,title,image,active,ImageFile")] page_image page_image)
    {
        if (ModelState.IsValid)
        {
            if (page_image.ImageFile != null)
            {
                string fileName = Path.GetFileNameWithoutExtension(page_image.ImageFile.FileName);
                string extension = Path.GetExtension(page_image.ImageFile.FileName);
                fileName = fileName + DateTime.Now.ToString("yymmssff") + extension;
                page_image.image = "/Uploads/page_images/" + fileName;

                fileName = Path.Combine(Server.MapPath("/Uploads/page_images"), fileName);
                page_image.ImageFile.SaveAs(fileName);
            }

            db.Entry(page_image).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        ViewBag.category = new SelectList(db.page, "id", "title", page_image.category);
        return View(page_image);
    }

Здесь я могу отредактировать пользователя, но не показываю предыдущее изображение, поэтому, если я нажму кнопку отправить без загрузки нового изображения, оно удалит предыдущее.То, что я должен сделать, это редактировать вид, я хочу, чтобы он отображал имя изображения.Можете ли вы направить меня в правильном направлении?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2019

Проблема в том, что вы сохраняете модель представления в базе данных, у вас должен быть DTO.В любом случае, попробуйте снова получить ImageFile из БД, если она отправлена ​​в ноль.

if(page_image.ImageFile != null)
{
    //  your uploading logic
}
else
{
    var oldData = db.Set<page_image>().Where(x => x.id == page_image.id).FirstOrDefault();
    page_image.ImageFile = oldData.ImageFile;
}
0 голосов
/ 19 сентября 2019

Если page_image.Image равно null, получите предыдущее изображение и присвойте

 if (page_image.ImageFile != null)
 {
       string fileName = Path.GetFileNameWithoutExtension(page_image.ImageFile.FileName);
       string extension = Path.GetExtension(page_image.ImageFile.FileName);
       fileName = fileName + DateTime.Now.ToString("yymmssff") + extension;
       page_image.image = "/Uploads/page_images/" + fileName;

       fileName = Path.Combine(Server.MapPath("/Uploads/page_images"), fileName);
       page_image.ImageFile.SaveAs(fileName);

 } else {
    // get existing image from database 
     var data = db.page_image.AsNoTracking().Where(b => b.id == page_image.id).FirstOrDefault();
     //assign to existing image
     page_image.image = data.image ;

 }
 db.Entry(page_image).State = EntityState.Modified;
 db.SaveChanges();
 return RedirectToAction("Index");

Обновление: Ошибка выдается здесь из-за того же экземпляра dbcontext.Вы можете создать новый экземпляр для получения или сделать следующее.

var data = db.page_image.AsNoTracking().Where(b => b.id == page_image.id).FirstOrDefault();

или

using (var db2 = new YourDbContext())
{
    var data = db2.page_image.Where(b => b.id == page_image.id).FirstOrDefault();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...