コード例 #1
0
        public ActionResult Edit(int id)
        {
            Forum forum = this.GetForum(id);

            if (forum == default(Forum) || forum.IsDeleted)
            {
                return(this.RedirectToAction("BadRequest", "Error"));
            }

            var role = this.GetRoleByName("Moderator");

            var moderators = this.GetUsersByRole(role.Id);

            foreach (var moderator in moderators)
            {
                if (forum.Moderators.Any(m => m.Id == moderator.Id))
                {
                    moderator.IsChecked = true;
                }
            }

            EditForumBindingModel forumModel = new EditForumBindingModel()
            {
                Id          = forum.ForumId,
                Title       = forum.Title,
                Description = forum.Description,
                Moderators  = moderators
            };

            return(this.View(forumModel));
        }
コード例 #2
0
        public ActionResult Edit(int id, EditForumBindingModel model)
        {
            Forum editForum = this.GetForum(id);

            if (editForum == default(Forum) || editForum.IsDeleted || id != model.Id)
            {
                return(this.RedirectToAction("BadRequest", "Error"));
            }

            if (!this.ModelState.IsValid)
            {
                return(this.View(model));
            }

            var role = this.GetRoleByName("Moderator");

            var moderatorsIds = model.Moderators
                                .Select(m => m.Id)
                                .ToArray();

            var users = this.UnitOfWork
                        .UserRepository
                        .Select(u => moderatorsIds.Contains(u.Id) && u.Roles.Any(r => r.RoleId == role.Id));

            string[] addedModerators = editForum.Moderators
                                       .Select(u => u.UserName)
                                       .ToArray();

            foreach (string userName in addedModerators)
            {
                if (!users.Any(u => u.UserName == userName))
                {
                    editForum.Moderators.Remove(editForum.Moderators.First(u => u.UserName == userName));
                }
            }

            foreach (User user in users)
            {
                if (!editForum.Moderators.Any(u => u.UserName == user.UserName))
                {
                    editForum.Moderators.Add(user);
                }
            }

            editForum.Title       = model.Title;
            editForum.Description = model.Description;

            editForum = this.UnitOfWork
                        .ForumRepository
                        .Update(editForum);

            this.UnitOfWork.SaveChanges();

            return(this.RedirectToAction("View", "Home", new { Id = editForum.ForumId }));
        }