示例#1
0
        // 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));
        }
示例#2
0
        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));
        }