// GET: Secrets/Edit/5
        public ActionResult Edit(short?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Secret secret = db.Secrets.Find(id);

            if (secret == null)
            {
                return(HttpNotFound());
            }
            ViewBag.IsAboutId = new SelectList(db.Infos, "InfoId", "Name", secret.IsAboutId);

            List <short> selectedTags = db.SecretSecretTags.Where(s => s.SecretId == id).Select(s => s.SecretTagId).ToList();
            SecretEditVM model        = new SecretEditVM(secret);

            ViewBag.Tags     = db.SecretTags.ToList();
            ViewBag.Selected = selectedTags;

            return(View(model));
        }
        public ActionResult Edit([Bind(Include = "SecretId,IsAboutId,TheContent")] SecretEditVM secret,
                                 List <short> tags)
        {
            if (ModelState.IsValid)
            {
                #region Update Tags
                short        secretId      = secret.SecretId;
                List <short> currentTagIds = db.SecretSecretTags.Where(x => x.SecretId == secretId).Select(x => x.SecretTagId).ToList();
                if (tags != null)
                {
                    foreach (short tag in tags)
                    {
                        if (true)
                        {
                            //if this is an already existing tag
                            if (currentTagIds.Contains(tag))
                            {
                                currentTagIds.Remove(tag);
                            }
                            //if this is a newly added tag
                            else
                            {
                                SecretSecretTag newTag = new SecretSecretTag {
                                    SecretId = secretId, SecretTagId = tag
                                };
                                db.SecretSecretTags.Add(newTag);
                            }
                        }
                    }
                }

                if (currentTagIds.Count != 0)
                {
                    foreach (short id in currentTagIds)
                    {
                        SecretSecretTag gone = db.SecretSecretTags.Where(x => x.SecretId == secretId & x.SecretTagId == id).FirstOrDefault();
                        db.SecretSecretTags.Remove(gone);
                    }
                }
                #endregion

                #region Update Secret
                Secret daSecret = new Secret
                {
                    SecretId   = secret.SecretId,
                    IsAboutId  = secret.IsAboutId,
                    TheContent = secret.TheContent
                };
                db.Entry(secret).State = EntityState.Modified;
                db.SaveChanges();
                #endregion

                return(RedirectToAction("Index"));
            }
            ViewBag.IsAboutId = new SelectList(db.Infos, "InfoId", "Name", secret.IsAboutId);
            ViewBag.Tags      = db.SecretTags.ToList();
            if (tags != null)
            {
                ViewBag.Selected = tags;
            }
            else
            {
                ViewBag.Selected = new List <short>();
            }
            return(View(secret));
        }