public async Task <IActionResult> Edit(int id, [Bind("ID,Title,Release,Time,RateID,IsDub,Director,Actors,Plot,Trailer,PosterID")] Movie movie, int[] GenreList) { if (id != movie.ID) { TempData["Status"] = "We're sorry, an unexpected error has been accured." + Environment.NewLine + "If you keep getting this error please contact system administrator."; TempData["Color"] = "danger"; return(RedirectToAction(nameof(Index))); } MovieDBExist(movie.Title, movie.Trailer, movie.ID); if (GenreList.Count() == 0) { ModelState.AddModelError("Genres", "At least one genre need to be selected."); } if (ModelState.IsValid) { try { db.Movies.Update(movie); //Edit the genres var selectedGenres = GenreList.ToHashSet(); var movieGenres = db.MovGens.Where(mg => mg.MovieID == movie.ID).Select(g => g.GenreID).ToHashSet(); var dbGenres = db.Genres.Select(g => g.ID).ToHashSet(); foreach (int item in dbGenres) { if (selectedGenres.Contains(item) && !movieGenres.Contains(item)) { db.MovGens.Add(new MovGen { MovieID = movie.ID, GenreID = item }); } else if (movieGenres.Contains(item) && !selectedGenres.Contains(item)) { db.MovGens.Remove(db.MovGens.Single(mg => mg.MovieID == movie.ID && mg.GenreID == item)); } } await db.SaveChangesAsync(); TempData["Status"] = "The changes you made to the movie have been saved!"; TempData["Color"] = "success"; } catch (DbUpdateConcurrencyException) { if (!MovieExists(movie.ID)) { return(RedirectToAction("Page404", "Home")); } TempData["Status"] = "We're sorry, an unexpected error has been accured." + Environment.NewLine + "If you keep getting this error please contact system administrator."; TempData["Color"] = "danger"; return(RedirectToAction(nameof(Index))); } return(RedirectToAction(nameof(Info), new { id = movie.ID })); } var model = new NewMovieViewModel(db); model.Movie = movie; model.Genres = model.EditGenres(GenreList); ViewData["PosterID"] = new SelectList(db.Images.Where(i => i.Category == ImageCategory.Posters), "ID", "Name", movie.PosterID); ViewData["RateID"] = new SelectList(db.Rates, "ID", "Code", movie.RateID); return(View(model)); }
public async Task <IActionResult> Create([Bind("Title,Release,Time,RateID,IsDub,Director,Actors,Plot,Trailer,PosterID")] Movie movie, int[] GenreList) { MovieDBExist(movie.Title, movie.Trailer); if (GenreList.Count() == 0) { ModelState.AddModelError("Genres", "At least one genre need to be selected."); } if (ModelState.IsValid) { try { db.Movies.Add(movie); foreach (int item in GenreList) { db.MovGens.Add(new MovGen { MovieID = movie.ID, GenreID = item }); } await db.SaveChangesAsync(); TempData["Status"] = "A new movie has been added."; TempData["Color"] = "success"; return(RedirectToAction(nameof(Index))); } catch (Exception) { TempData["Status"] = "We're sorry, an unexpected error has been accured." + Environment.NewLine + "If you keep getting this error please contact system administrator."; TempData["Color"] = "danger"; var erModel = new NewMovieViewModel(db); erModel.Movie = movie; erModel.Genres = erModel.EditGenres(GenreList); ViewData["PosterID"] = new SelectList(db.Images.Where(i => i.Category == ImageCategory.Posters), "ID", "Name", movie.PosterID); ViewData["RateID"] = new SelectList(db.Rates, "ID", "Code", movie.RateID); return(View(erModel)); } } var model = new NewMovieViewModel(db); model.Movie = movie; model.Genres = model.EditGenres(GenreList); ViewData["PosterID"] = new SelectList(db.Images.Where(i => i.Category == ImageCategory.Posters), "ID", "Name", movie.PosterID); ViewData["RateID"] = new SelectList(db.Rates, "ID", "Code", movie.RateID); return(View(model)); }