Search code examples
asp.net-mvcnullviewmodelupdatemodel

MVC Updates over values with NULL


This is probably very simple for most MVC programmers, so maybe you can help me out. I have a table called Images in the database with nine columns. On my UPDATE, I just have three I want to mess with (ImageName, ImagePath, CourseID). After I post back with UPDATE, it sets the other six columns to NULL. I'm not sure how to handle this in MVC.:

Image table

Image table after UPDATE

My ViewModel:

public class GalleryViewModel
{     
  public Image _image { get; set; }
}  

My Model:

 public partial class Image
 {
    public int ImageID { get; set; }
    public string ImageName { get; set; }
    public string ImagePath { get; set; }
    public Nullable<int> CourseID { get; set; }
    public string UserId { get; set; }
    public Nullable<System.DateTime> CreateDate { get; set; }
    public string ImageType { get; set; }
    public string ImageSize { get; set; }
    public string FriendlyName { get; set; }

    public virtual Cours Cours { get; set; }
}

My Controller:

   [HttpGet]
    public ActionResult UploadImageEdit(int? id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        var model = new GalleryViewModel
        {
            _image = db.Images.Find(id),
        };
        return View(model);
    }


    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult UploadImageEdit(GalleryViewModel galleryViewModel)
    {
        if (ModelState.IsValid)
        {
            db.Entry(galleryViewModel._image).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("UploadImageIndex");
        }
        return View(galleryViewModel);
    }

Solution

  • After reading other examples and becoming more familiar with ViewModel to controller, I got the UPDATE to work by doing the following:

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult UploadImageEdit(int id, GalleryViewModel galleryViewModel)
        {
            if (ModelState.IsValid)
            {
                var imageContext = db.Images.Find(id);
    
                imageContext.FriendlyName = galleryViewModel._image.FriendlyName;
                db.Entry(imageContext).State = EntityState.Modified;
                db.SaveChanges();
    
                return RedirectToAction("UploadImageIndex");
            }
            return View(galleryViewModel);
        }
    

    I hope this helps other folks out!