// GET: Adventures/Edit/5 public ActionResult Edit(int?id, bool showDetail) { // [email protected] [email protected] [email protected] if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } Adventure adventure = db.Adventures.Find(id); if (adventure == null) { return(HttpNotFound()); } ViewBag.ContributorID = adventure.ContributorID; // new SelectList(db.Contributors, "ContributorID", "FirstName", adventure.ContributorID); ViewBag.ShowDetail = showDetail; AdventureCategoriesViewModel adventureCategoriesViewModel = new AdventureCategoriesViewModel(); adventureCategoriesViewModel.Adventure = adventure; adventureCategoriesViewModel.Categories = GetAllCategories(); adventureCategoriesViewModel.SelectedCategoriesIds = db.AdventureCategories.Where(a => a.AdventureID == adventure.AdventureID).Select(a => a.CategoryID).ToArray(); //return View(adventure); return(View(adventureCategoriesViewModel)); }
//public ActionResult Edit(Adventure adventure, bool showDetail) public ActionResult Edit(AdventureCategoriesViewModel adventureCategoriesViewModel) { // [email protected] [email protected] [email protected] ViewBag.ContributorID = adventureCategoriesViewModel.Adventure.ContributorID; if (ModelState.IsValid) { db.Entry(adventureCategoriesViewModel.Adventure).State = EntityState.Modified; db.SaveChanges(); // If the selected categories are different from what's in the db, update the db var existingSelectedCategories = db.AdventureCategories.Where(a => a.AdventureID == adventureCategoriesViewModel.Adventure.AdventureID).Select(a => a.CategoryID).ToArray(); if (adventureCategoriesViewModel.SelectedCategoriesIds != existingSelectedCategories) { var listExistingSelectedCategories = existingSelectedCategories.ToList(); // if no categories are selected, delete all records from AdventureCategories; // else check for categories to add & delete if (adventureCategoriesViewModel.SelectedCategoriesIds == null) { // [email protected] [email protected] [email protected] db.Database.ExecuteSqlCommand($"DELETE FROM AdventureCategories WHERE AdventureID = {adventureCategoriesViewModel.Adventure.AdventureID};"); } else { // Check for categories to add/insert foreach (int thisCategoryId in adventureCategoriesViewModel.SelectedCategoriesIds) { if (!listExistingSelectedCategories.Contains(thisCategoryId)) { db.Database.ExecuteSqlCommand($"INSERT INTO AdventureCategories VALUES ({adventureCategoriesViewModel.Adventure.AdventureID}, {thisCategoryId});"); } } // Check for categories to delete foreach (int thisCategoryId in listExistingSelectedCategories) { if (!adventureCategoriesViewModel.SelectedCategoriesIds.Contains(thisCategoryId)) { db.Database.ExecuteSqlCommand($"DELETE FROM AdventureCategories WHERE AdventureID = {adventureCategoriesViewModel.Adventure.AdventureID} AND CategoryID = {thisCategoryId};"); } } } } return(RedirectToAction("Details", new { id = adventureCategoriesViewModel.Adventure.AdventureID, showDetail = adventureCategoriesViewModel.ShowDetail })); } ViewBag.ShowDetail = adventureCategoriesViewModel.ShowDetail; return(View(adventureCategoriesViewModel.Adventure)); }