/// <summary> /// View content includes /// </summary> /// <param name="contentId">Content to display</param> /// <param name="detailId">Boilerplate id</param> /// <returns></returns> public ActionResult Includes(int? contentId, int? detailId) { var content = _entities.Contents.Include("Boilerplates").Include("BoilerplatesUsed").FirstOrDefault(c => c.Id == contentId); if (content == null) { return RedirectToRoute("ContentIndex"); } if (detailId != null) { // Delete the requested id var boilerplate = _entities.ContentBoilerplates.Include("Content") .Include("Boilerplate") .FirstOrDefault(c => c.Id == detailId); if (boilerplate == null || boilerplate.ContentId != content.Id) { return RedirectToRoute("ContentDetail", new { contentId = content.Id, action = "includes" }); } _entities.ContentBoilerplates.Remove(boilerplate); content.Parse(); _entities.SaveChanges(); return RedirectToRoute("ContentDetail", new { contentId = content.Id, action = "includes" }); } var model = new ContentIncludesViewModel { Content = content, ContentId = content.Id, AvailableBoilerplates = _entities.Contents .Where(c => c.Id != content.Id) .Where(c => c.Type == ContentType.Boilerplate) .Where(c => _entities.ContentBoilerplates.All(b => b.BoilerplateId != c.Id || b.ContentId != content.Id)) .AsEnumerable() .Select(c => new SelectListItem { Text = string.Format("{0}: {1}", c.Id, c.Title), Value = c.Id.ToString() }) }; return View("~/Areas/mitarbeit/Views/Content/Includes.cshtml", model); }
public ActionResult Includes(ContentIncludesViewModel model) { // grab the content object and load the boilerplate navigation properties var content = _entities.Contents .Include(c => c.Boilerplates.Select(b => b.Boilerplate)) .Include(c => c.BoilerplatesUsed.Select(b => b.Boilerplate)) .FirstOrDefault(c => c.Id == model.ContentId); if (content == null) { return RedirectToRoute("ContentIndex"); } if (ModelState.IsValid) { var boilerplateDuplicates = _entities.ContentBoilerplates .Where(c => c.Content.Id == model.ContentId) .Where(c => c.BoilerplateId == model.BoilerplateId); var boilerplateContent = _entities.Contents .Where(c => c.Id == model.BoilerplateId) .Where(c => c.Type == ContentType.Boilerplate); if (!boilerplateContent.Any()) { ViewBag.Error = "Der Textbaustein existiert nicht."; model.Saved = false; } else if (boilerplateDuplicates.Any()) { ViewBag.Error = "Du kannst den Textbaustein nicht mehrfach einbinden."; model.Saved = false; } else { var boilerplate = new ContentBoilerplate { ContentId = content.Id, BoilerplateId = model.BoilerplateId, ContentBoilerplateName = model.BoilerplateName }; _entities.ContentBoilerplates.Add(boilerplate); // We have to manually load these navigation properties for whatever reason foreach (var bp in content.Boilerplates) { _entities.Entry(bp).Reference(b => b.Boilerplate).Load(); } foreach (var bp in content.BoilerplatesUsed) { _entities.Entry(bp).Reference(b => b.Boilerplate).Load(); _entities.Entry(bp).Reference(b => b.Content).Load(); } // re-parse the content content.Parse(); _entities.SaveChanges(); model.Saved = true; } } // Update content object content = _entities.Contents .Include(c => c.Boilerplates.Select(b => b.Boilerplate)) .Include(c => c.BoilerplatesUsed.Select(b => b.Boilerplate)) .FirstOrDefault(c => c.Id == model.ContentId); model.Content = content; model.AvailableBoilerplates = _entities.Contents .Where(c => c.Id != content.Id) .Where(c => c.Type == ContentType.Boilerplate) .Where(c => _entities.ContentBoilerplates.All(b => b.BoilerplateId != c.Id || b.ContentId != content.Id)) .AsEnumerable() .Select(c => new SelectListItem { Text = string.Format("{0}: {1}", c.Id, c.Title), Value = c.Id.ToString() }); return View("~/Areas/mitarbeit/Views/Content/Includes.cshtml", model); }