public ActionResult Create([Bind(Include = "Id,Date,Title,Text")] Posts posts, List<int> tags) { var userManager = new ApplicationUserManager(new UserStore<ApplicationUser>(db)); if (ModelState.IsValid) { posts.User = userManager.FindByName(User.Identity.Name); // Связь поста с изображениями. List<Images> images = ImgMarkup.Matches(posts.Text); if (images?.Count > 0) { foreach (var image in images) { posts.Images.Add(db.Images.Find(image.Id)); } } // Связь поста с тегами. if (tags?.Count > 0) { foreach (var id in tags) { Tags tag = db.Tags.Find(id); if (tag == null) { ModelState.AddModelError("", "Выбран несуществующий тег."); return View(posts); } posts.Tags.Add(tag); } } db.Posts.Add(posts); db.SaveChanges(); return RedirectToAction("Index"); } return View(posts); }
public ActionResult Edit([Bind(Include = "Id,Date,Title,Text")] Posts posts, List<int> tags) { Posts currentPost = db.Posts.Find(posts.Id); if (currentPost == null) { return HttpNotFound(); } // Редактор может редактировать только свой пост, а администратор все. if ((User.IsInRole("editor") && (currentPost.User.Id == User.Identity.GetUserId())) || User.IsInRole("admin")) { if (ModelState.IsValid) { #region // Обновленные данные. currentPost.Date = posts.Date; currentPost.Title = posts.Title; currentPost.Text = posts.Text; // Удалить предшествующие изображения и теги. currentPost.Images.Clear(); currentPost.Tags.Clear(); // Связь поста с изображениями. List<Images> images = ImgMarkup.Matches(posts.Text); if (images?.Count > 0) { foreach (var image in images) { currentPost.Images.Add(db.Images.Find(image.Id)); } } // Связь поста с тегами. if (tags?.Count > 0) { foreach (var id in tags) { Tags tag = db.Tags.Find(id); if (tag == null) { ModelState.AddModelError("", "Выбран несуществующий тег."); return View(posts); } currentPost.Tags.Add(tag); } } // Обновление. db.SaveChanges(); return RedirectToAction("Index"); #endregion } } else { ModelState.AddModelError("", "У вас недостаточно прав для редактирования поста."); } return View(posts); }