// GET: Lores/Edit/5 public ActionResult Edit(short?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } Lore lore = db.Lores.Find(id); if (lore == null) { return(HttpNotFound()); } short infoid = lore.InfoId; Info info = db.Infos.Find(infoid); LoreEditVM model = new LoreEditVM(lore, info); List <short> selectedTags = db.InfoTags.Where(t => t.InfoId == infoid).Select(t => t.TagId).ToList(); ViewBag.Selected = selectedTags; ViewBag.Tags = db.Tags.ToList(); return(View(model)); }
public ActionResult Edit([Bind(Include = "LoreId,InfoId,Name,TheContent,Blurb,IsPublished, IsSecret")] LoreEditVM lore, List <short> tags, string submit) { if (ModelState.IsValid) { #region Save or Publish? switch (submit) { case "Save Progress": case "Un-Publish": lore.IsPublished = false; break; case "Publish": case "Save": lore.IsPublished = true; break; } #endregion var infoid = lore.InfoId; #region Info Update //Info info = db.Infos.Find(infoid); Info info = db.Infos.Where(i => i.InfoId == infoid).FirstOrDefault(); info.Name = lore.Name; info.Blurb = lore.Blurb; info.IsPublished = lore.IsPublished; info.IsSecret = lore.IsSecret; #endregion #region Update tags List <short> currentTagIds = db.InfoTags.Where(x => x.InfoId == infoid).Select(x => x.TagId).ToList(); if (tags != null) { foreach (short tag in tags) { //if this is an already existing tag if (currentTagIds.Contains(tag)) { currentTagIds.Remove(tag); } //if this is a newly added tag else { InfoTag newTag = new InfoTag { InfoId = infoid, TagId = tag }; db.InfoTags.Add(newTag); } } } if (currentTagIds.Count != 0) { foreach (short id in currentTagIds) { InfoTag gone = db.InfoTags.Where(x => x.InfoId == infoid & x.TagId == id).FirstOrDefault(); db.InfoTags.Remove(gone); } } #endregion #region Update Lore Lore daLore = new Lore { LoreId = lore.LoreId, InfoId = lore.InfoId, Name = lore.Name, TheContent = lore.TheContent, IsPublished = lore.IsPublished }; db.Entry(daLore).State = EntityState.Modified; db.SaveChanges(); #endregion return(RedirectToAction("Details", new { id = lore.LoreId })); } ViewBag.Tags = db.Tags.ToList(); if (tags != null) { ViewBag.Selected = tags; } else { ViewBag.Selected = new List <short>(); } ModelState.AddModelError("", "Something has gone wrong. Look for red text to see where is went wrong"); return(View(lore)); }