public ActionResult EditGallery( int pageId, EditGalleryViewModel galleryViewModel) { try { if (ModelState.IsValid) { // TODO ждет рефакторинга: вместо вызова AddGalleryItems, UpdateGalleryItems, RemoveGalleryItems // вызывать один метод сервиса, например GalleryWebPageManagementService.SetGalleryItems, // который будет или сохранять все изменения по элементам галереи, или, в случае ошибки, ничего не изменять var noErrors = true; lock (updateLocker) { // добавление новых элементов в галерею var galleryItemsForAdding = galleryViewModel.GalleryItems .Where(gi => gi.Id == 0 && gi.Choosen) .ToList(); noErrors = AddGalleryItems( pageId, galleryItemsForAdding) && noErrors; // изменение существующих элементов галереи var galleryItemsForUpdating = galleryViewModel.GalleryItems .Where(gi => gi.Id != 0 && gi.Choosen) .ToList(); noErrors = UpdateGalleryItems( pageId, galleryItemsForUpdating) && noErrors; // удаление элементов галереи var galleryItemsForRemoving = galleryViewModel.GalleryItems .Where(gi => gi.Id != 0 && !gi.Choosen) .ToList(); noErrors = RemoveGalleryItems( pageId, galleryItemsForRemoving) && noErrors; } if (noErrors) { return RedirectToAction("Index", "Page"); } else { ModelState.AddModelError(string.Empty, _someChangesMayBeLostError); } } } catch (Exception ex) { ModelState.AddModelError(string.Empty, _generalError); _logger.Error( ex, "Не удалось обновить состав элементов галереи" + " страницы pageId='{0}', viewModel='{1}'", pageId, galleryViewModel); } galleryViewModel.ImageFiles = GetImageList(); return View(galleryViewModel); }
/// <summary> /// Изменить элементы галереи (добавить, убрать, редактировать) - подготовка /// </summary> /// <param name="pageId">Идентификатор страницы-галереи</param> /// <returns>Представление для редактирования элементов галереи</returns> public ActionResult EditGallery(int pageId) { var galleryPageDto = _displayingService.GetWebPageById(pageId) as GalleryWebPageDisplayingDto; if (galleryPageDto != null) { var imageDtoList = _fileDisplayingService .GetFileList(UploadedFileTypes.Image); var galleryItemDtoList = galleryPageDto.GalleryItems .Where(gi => gi.ImageFile != null) .ToList(); // склеиваем перечень картинок и перечень элементов галереи // в одну модель представления через left join var galleryItemViewModelList = from im in imageDtoList join gi in galleryItemDtoList on im.Id equals gi.ImageFile.Id into gij from g in gij.DefaultIfEmpty() orderby (g != null ? g.SortOrder : int.MaxValue) select new EditGalleryItemViewModel() { ImageFileId = im.Id, Id = (g != null ? g.Id : 0), Choosen = (g != null), SortOrder = (g != null ? g.SortOrder : 0), TimeStamp = (g != null ? g.TimeStamp : null) }; var editGalleryViewModel = new EditGalleryViewModel() { Title = galleryPageDto.Title, GalleryItems = galleryItemViewModelList, ImageFiles = GetImageList() }; return View(editGalleryViewModel); } return HttpNotFound(); }