Ejemplo n.º 1
0
        public AddNewsPage(int?obavijestiID)
        {
            InitializeComponent();
            ObavijestiID = obavijestiID;

            BindingContext = model = new AddNewsViewModel();
        }
Ejemplo n.º 2
0
        public async Task <NewsViewModel> SaveNewsAsync(AddNewsViewModel viewModel, int id = 0)
        {
            if (id == 0)
            {
                _context.News.Add(new News
                {
                    Name      = viewModel.Name,
                    Path      = viewModel.Path,
                    Tag       = viewModel.Tag,
                    ImagePath = viewModel.ImagePath
                });
                _context.SaveChanges();
                var n = await _context.News.LastAsync();

                string text1 = File.ReadAllText(@"../BeFit/wwwroot" + n.Path);
                return(new NewsViewModel {
                    Name = n.Name, ImagePath = n.ImagePath, Tag = n.Tag
                });
            }
            var news = await _context.News.FindAsync(id);

            if (news == null)
            {
                return(null);
            }
            news.Name      = viewModel.Name;
            news.Path      = viewModel.Path;
            news.Tag       = viewModel.Tag;
            news.ImagePath = viewModel.ImagePath;
            string text = File.ReadAllText(@"../BeFit/wwwroot" + news.Path);

            return(new NewsViewModel {
                Name = news.Name, ImagePath = news.ImagePath, Tag = news.Tag
            });
        }
Ejemplo n.º 3
0
        public ActionResult Edit(AddNewsViewModel model, HttpPostedFileBase file)
        {
            var entity = model.ToNewsResult()
                         .Update(x =>
            {
                x.LastUpdatedBy = UserName;
                x.IsDeleted     = !model.IsDeleted;
                if (!string.IsNullOrEmpty(file?.FileName))
                {
                    x.UrlImage = file.FileName;
                }
            });

            var result = NewsRepository.Update(entity);

            if (result == SaveResult.SUCCESS)
            {
                EnsureFolderNews(model.Id);
                SaveFile(model.Id, file);
            }
            else
            {
                ViewBag.HasError = true;
            }

            var newsCategory = NewsCategoryRepository.GetAll().Select(x => x.ToDataViewModel());

            model.NewsCategory = newsCategory;

            return(View(model));
        }
        public ActionResult Index(AddNewsViewModel model, HttpPostedFileBase file)
        {
            if (ModelState.IsValid)
            {
                string imageUrl = Constants.NewsDefaultImage;
                if (file != null && file.ContentLength <= Constants.ImageMaxSize)
                {
                    imageUrl = Constants.NewsImagesFolder + file.FileName;
                    file.SaveAs(HttpContext.Server.MapPath(Constants.NewsImagesServerFolder)
                                + file.FileName);
                }

                try
                {
                    var date = this.dateProvider.GetDate();
                    var news = this.newsFactory.CreateNews(model.Title, model.Content, imageUrl, date);

                    this.newsService.Add(news);
                    this.newsService.Save();
                    TempData[GlobalMessages.AddNewsSuccessKey] = GlobalMessages.AddNewsSuccessMessage;
                }
                catch (Exception ex)
                {
                    ModelState.AddModelError("", ex.Message);
                }

                return(View(model));
            }

            return(View(model));
        }
Ejemplo n.º 5
0
        public IActionResult AddNews([FromBody] AddNewsViewModel model)
        {
            var claims = User.Claims;
            var userId = claims.FirstOrDefault().Value;

            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }
            if (!string.IsNullOrEmpty(model.Group))
            {
                _newsRepo.AddGroupNews(new NewsGroupModel()
                {
                    Content   = model.Content,
                    GroupId   = int.Parse(model.Group),
                    TeacherId = userId,
                    Topic     = model.Topic
                });
            }
            else
            {
                _newsRepo.AddNews(new NewsModel()
                {
                    Content   = model.Content,
                    TeacherId = userId,
                    Topic     = model.Topic
                });
            }
            return(Ok());
        }
Ejemplo n.º 6
0
        public IActionResult Add([FromBody] AddNewsViewModel newsItem)
        {
            if (newsItem == null)
            {
                return(BadRequest("News is null"));
            }

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            newsItem.News.CreatedDate = DateTime.Now;
            newsItem.News.UpdatedDate = DateTime.Now;

            if (newsItem.News.Category?.Id != null)
            {
                Category c = _categoryRepository.GetById((int)newsItem.News.Category.Id);
                newsItem.News.Category = c;
            }

            // Förhindra att ny kategori skapas om ingen anges
            if (newsItem.News.Category?.Id == null)
            {
                newsItem.News.Category = null;
            }


            //creates all tags and the connection between tags and news
            News thisNews = _newsRepository.Add(newsItem.News);

            foreach (var tag in newsItem.Tags)
            {
                if (tag.Id == 0)
                {
                    var newTag        = _tagRepository.Create(tag);
                    var tagConnection = new NewsTag {
                        News = thisNews, NewsId = thisNews.Id, Tag = newTag, TagId = newTag.Id
                    };
                    thisNews.NewsTags.Add(tagConnection);
                }
                else
                {
                    var alreadyAddedTag = _tagRepository.GetById(tag.Id);
                    var tagConnection   = new NewsTag {
                        News = thisNews, NewsId = thisNews.Id, Tag = alreadyAddedTag
                    };
                    thisNews.NewsTags.Add(tagConnection);
                }
            }



            //updates the news to add the connection between tags and this news
            _newsRepository.Update(thisNews);

            return(Ok());
        }
Ejemplo n.º 7
0
        public ActionResult Add()
        {
            var newsCategory = NewsCategoryRepository.GetAll().Select(x => x.ToDataViewModel());
            var model        = new AddNewsViewModel {
                NewsCategory = newsCategory
            };

            return(View(model));
        }
Ejemplo n.º 8
0
        public ActionResult Add(AddNewsViewModel model)
        {
            if (ModelState.IsValid)
            {
                var userId = this.authenticationProvider.CurrentUserId;

                var news = this.newsService.CreateNews(userId, model.Title, model.Text, model.CoverPicture, model.Category);

                return(RedirectToAction("Details", "News", new { newsId = news.NewsId }));
            }

            model.Cloudinary = this.cloudinary;
            return(View(model));
        }
Ejemplo n.º 9
0
        public async Task <IActionResult> Edit(int?id, AddNewsViewModel viewModel)
        {
            if (id == null)
            {
                id = 0;
            }
            try
            {
                if (ModelState.IsValid)
                {
                    if (viewModel.ITextFile != null)
                    {
                        var Path = @"../BeFit/wwwroot/Files/" + viewModel.ITextFile.FileName;

                        using (var stream = new FileStream(Path, FileMode.Create, FileAccess.ReadWrite))
                        {
                            await viewModel.ITextFile.CopyToAsync(stream);

                            viewModel.Path = @"/Files/" + viewModel.ITextFile.FileName;
                        }
                    }
                    if (viewModel.IImageFile != null)
                    {
                        var Path = @"../BeFit/wwwroot/Files/" + viewModel.IImageFile.FileName;

                        using (var stream = new FileStream(Path, FileMode.Create, FileAccess.ReadWrite))
                        {
                            await viewModel.IImageFile.CopyToAsync(stream);

                            viewModel.ImagePath = @"/Files/" + viewModel.IImageFile.FileName;
                        }
                    }
                    var saving1 = await _newsRepository.SaveNewsAsync(viewModel, (int)id);

                    if (saving1 != null)
                    {
                        return(View("Details", saving1));
                    }
                }
            }
            catch (DbUpdateException /* ex */)
            {
                //Log the error (uncomment ex variable name and write a log.
                ModelState.AddModelError("", "Unable to save changes. " +
                                         "Try again, and if the problem persists " +
                                         "see your system administrator.");
            }

            return(View(viewModel));
        }
Ejemplo n.º 10
0
        public void ReturnViewWithModelErrors_IfAddindNewsFailed()
        {
            // Arrange
            var mockedNewsFactory = new Mock <INewsFactory>();

            mockedNewsFactory.Setup(f => f.CreateNews(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <DateTime>())).Verifiable();

            var mockedNewsService = new Mock <INewsService>();

            mockedNewsService.Setup(s => s.Add(It.IsAny <News>())).Verifiable();
            mockedNewsService.Setup(s => s.Save()).Throws(new Exception("Test"));

            var mockedDateProvider = new Mock <IDateProvider>();

            mockedDateProvider.Setup(d => d.GetDate()).Verifiable();

            var mockedHttpContext = new Mock <ControllerContext>();

            mockedHttpContext.Setup(c => c.HttpContext.Server.MapPath(It.IsAny <string>())).Returns("Test");

            var controller = new NewsController(mockedNewsFactory.Object, mockedNewsService.Object, mockedDateProvider.Object);

            controller.ControllerContext = mockedHttpContext.Object;

            var model      = new AddNewsViewModel();
            var mockedFile = new MockHttpPostedFileBase();

            mockedFile.SetContentLength(Constants.ImageMaxSize);

            // Act
            var result = controller.Index(model, mockedFile) as ViewResult;

            // Assert
            ModelState modelError;

            result.ViewData.ModelState.TryGetValue("", out modelError);

            Assert.AreEqual("", result.ViewName);
            Assert.IsTrue(modelError.Errors.First().ErrorMessage == "Test");
            Assert.IsTrue(result.TempData[GlobalMessages.AddNewsSuccessKey] == null);

            mockedNewsFactory.Verify(f => f.CreateNews(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <DateTime>()), Times.Once);

            mockedNewsService.Verify(s => s.Add(It.IsAny <News>()), Times.Once);

            mockedDateProvider.Verify(d => d.GetDate(), Times.Once);
        }
Ejemplo n.º 11
0
        public void ReturnViewWithModelErrors_IfModelStateIsNotValid()
        {
            // Arrange
            var mockedNewsFactory = new Mock <INewsFactory>();

            mockedNewsFactory.Setup(f => f.CreateNews(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <DateTime>())).Verifiable();

            var mockedNewsService = new Mock <INewsService>();

            mockedNewsService.Setup(s => s.Add(It.IsAny <News>())).Verifiable();
            mockedNewsService.Setup(s => s.Save()).Verifiable();

            var mockedDateProvider = new Mock <IDateProvider>();

            mockedDateProvider.Setup(d => d.GetDate()).Verifiable();

            var controller = new NewsController(mockedNewsFactory.Object, mockedNewsService.Object, mockedDateProvider.Object);

            var expextedError        = "test error";
            var expectedErrorMessage = "Test";

            controller.ModelState.AddModelError(expextedError, expectedErrorMessage);

            var model      = new AddNewsViewModel();
            var mockedFile = new MockHttpPostedFileBase();

            mockedFile.SetContentLength(Constants.ImageMaxSize);

            // Act
            var result = controller.Index(model, mockedFile) as ViewResult;

            // Assert
            ModelState modelError;

            result.ViewData.ModelState.TryGetValue(expextedError, out modelError);

            Assert.AreEqual("", result.ViewName);
            Assert.IsTrue(modelError.Errors.First().ErrorMessage == expectedErrorMessage);
            Assert.IsTrue(result.TempData[GlobalMessages.AddNewsSuccessKey] == null);

            mockedNewsFactory.Verify(f => f.CreateNews(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <DateTime>()), Times.Never);

            mockedNewsService.Verify(s => s.Add(It.IsAny <News>()), Times.Never);
            mockedNewsService.Verify(s => s.Save(), Times.Never);

            mockedDateProvider.Verify(d => d.GetDate(), Times.Never);
        }
Ejemplo n.º 12
0
 public static NewsResult ToNewsResult(this AddNewsViewModel model)
 {
     return(model == null ? null : new NewsResult
     {
         Id = model.Id,
         CreateDate = model.CreateDate,
         CreatedBy = model.CreatedBy,
         IsDeleted = model.IsDeleted,
         LastUpdated = model.LastUpdated,
         LastUpdatedBy = model.LastUpdatedBy,
         Content = model.Content,
         Summary = model.Summary,
         NewsCategoryId = model.NewsCategoryId,
         Title = model.Title,
         UrlImage = model.UrlImage,
     });
 }
Ejemplo n.º 13
0
        public void _Call_NewsService_CreateNews(
            string userId,
            string title,
            string text,
            CategoryEnum category,
            string coverPicUrl)
        {
            //Arrange
            var fakeAcc          = new CloudinaryDotNet.Account("fake", "fake", "fake");
            var mockedCloudinary = new Mock <Cloudinary>(fakeAcc);

            var model = new AddNewsViewModel(mockedCloudinary.Object)
            {
                Title        = title,
                Text         = text,
                Category     = category,
                CoverPicture = coverPicUrl,
            };

            var news = new Models.News();

            var mockedAuthProvider = new Mock <IAuthenticationProvider>();

            mockedAuthProvider.Setup(a => a.CurrentUserId).Returns(userId);

            var mockedNewsService = new Mock <INewsService>();

            mockedNewsService.Setup(s => s.CreateNews(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <CategoryEnum>())).Returns(news);

            var mockedViewModelFactory = new Mock <IViewModelFactory>();

            mockedViewModelFactory.Setup(v => v.CreateAddNewsViewModel(It.IsAny <Cloudinary>())).Returns(model);

            var newsControllerSUT = new NewsController(mockedAuthProvider.Object, mockedNewsService.Object, mockedViewModelFactory.Object, mockedCloudinary.Object);

            newsControllerSUT.ModelState.Clear();

            //Act
            var res = newsControllerSUT.Add(model) as RedirectToRouteResult;

            //Assert
            mockedNewsService.Verify(n => n.CreateNews(userId, title, text, coverPicUrl, category), Times.Once);
        }
Ejemplo n.º 14
0
        public ActionResult AddNews([FromBody] AddNewsViewModel model)
        {
            if (ModelState.IsValid)
            {
                var news = new News()
                {
                    Title      = model.Title,
                    Text       = model.Text,
                    Image      = model.Image,
                    CreateDate = model.CreateDate
                };

                if (_commonBll.AddNews(news))
                {
                    return(Ok());
                }
                return(BadRequest());
            }
            return(BadRequest());
        }
Ejemplo n.º 15
0
        public void _Return_View_With_Model()
        {
            //Arrange
            var model = new AddNewsViewModel();

            var mockedAuthProvider = new Mock <IAuthenticationProvider>();
            var mockedNewsService  = new Mock <INewsService>();

            var mockedViewModelFactory = new Mock <IViewModelFactory>();

            mockedViewModelFactory.Setup(v => v.CreateAddNewsViewModel(It.IsAny <Cloudinary>())).Returns(model);

            var fakeAcc           = new CloudinaryDotNet.Account("fake", "fake", "fake");
            var mockedCloudinary  = new Mock <Cloudinary>(fakeAcc);
            var newsControllerSUT = new NewsController(mockedAuthProvider.Object, mockedNewsService.Object, mockedViewModelFactory.Object, mockedCloudinary.Object);

            //Act
            var res = newsControllerSUT.Add() as ViewResult;

            //Assert
            Assert.AreEqual(model, res.Model);
        }
Ejemplo n.º 16
0
        public void _Return_RedirectToRouteResult_WithFalsePermanent()
        {
            //Arrange
            var fakeAcc          = new CloudinaryDotNet.Account("fake", "fake", "fake");
            var mockedCloudinary = new Mock <Cloudinary>(fakeAcc);

            var model = new AddNewsViewModel(mockedCloudinary.Object)
            {
                Title        = "Some title",
                Text         = "Some text",
                Category     = Models.Enums.CategoryEnum.Abstract,
                CoverPicture = "SomeUrl",
            };

            var news = new Models.News();

            var mockedAuthProvider = new Mock <IAuthenticationProvider>();

            mockedAuthProvider.Setup(a => a.CurrentUserId).Returns("userId");

            var mockedNewsService = new Mock <INewsService>();

            mockedNewsService.Setup(s => s.CreateNews(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <CategoryEnum>())).Returns(news);

            var mockedViewModelFactory = new Mock <IViewModelFactory>();

            mockedViewModelFactory.Setup(v => v.CreateAddNewsViewModel(It.IsAny <Cloudinary>())).Returns(model);

            var newsControllerSUT = new NewsController(mockedAuthProvider.Object, mockedNewsService.Object, mockedViewModelFactory.Object, mockedCloudinary.Object);

            newsControllerSUT.ModelState.Clear();

            //Act
            var res = newsControllerSUT.Add(model) as RedirectToRouteResult;

            //Assert
            Assert.IsFalse(res.Permanent);
        }
Ejemplo n.º 17
0
        // GET: Food/Edit/5
        public async Task <IActionResult> Edit(int?id)
        {
            if (id == null)
            {
                return(View(new AddNewsViewModel()));
            }
            var news = await _newsRepository.GetNewsAsync((int)id);

            if (news == null)
            {
                return(View(new AddNewsViewModel()));
            }

            var viewModel = new AddNewsViewModel()
            {
                Name      = news.Name,
                Path      = news.Path,
                ImagePath = news.ImagePath,
                Tag       = news.Tag
            };

            return(View(viewModel));
        }
Ejemplo n.º 18
0
        public void _Call_NewsService_GetNewsById(string cloud, string apiKey, string apiSecret, int newsId)
        {
            //Arrange
            var model = new AddNewsViewModel();

            var mockedAuthProvider = new Mock <IAuthenticationProvider>();
            var mockedNewsService  = new Mock <INewsService>();

            var mockedViewModelFactory = new Mock <IViewModelFactory>();

            mockedViewModelFactory.Setup(v => v.CreateAddNewsViewModel(It.IsAny <Cloudinary>())).Returns(model);

            var fakeAcc          = new CloudinaryDotNet.Account(cloud, apiKey, apiSecret);
            var mockedCloudinary = new Mock <Cloudinary>(fakeAcc);

            var newsControllerSUT = new NewsController(mockedAuthProvider.Object, mockedNewsService.Object, mockedViewModelFactory.Object, mockedCloudinary.Object);

            //Act
            var res = newsControllerSUT.Details(newsId) as ViewResult;

            //Assert
            mockedNewsService.Verify(n => n.GetNewsById(newsId), Times.Once);
        }
Ejemplo n.º 19
0
        public ActionResult Add(AddNewsViewModel model, HttpPostedFileBase file)
        {
            var entity = model.ToNewsResult()
                         .Update(x =>
            {
                x.CreatedBy = UserName;
                x.IsDeleted = !model.IsDeleted;
                x.UrlImage  = file.FileName;
            });

            var result = NewsRepository.Add(entity);

            if (result == SaveResult.SUCCESS)
            {
                SaveFile(entity.Id, file);

                return(RedirectToRoute(UrlLink.NEWS_EDIT, new { id = entity.Id }));
            }
            ViewBag.HasError = true;
            var newsCategory = NewsCategoryRepository.GetAll().Select(x => x.ToDataViewModel());

            model.NewsCategory = newsCategory;
            return(View());
        }
Ejemplo n.º 20
0
        public async Task <IActionResult> AddNews(AddNewsViewModel model, IFormFileCollection uploads)
        {
            // Проверяем, чтобы размер файлов не превышал заданный объем
            foreach (var file in uploads)
            {
                if (file.Length > 2097152)
                {
                    ModelState.AddModelError("NewsImage", $"Файл \"{file.FileName}\" превышает установленный лимит 2MB.");
                    break;
                }
            }

            // Если все в порядке, заходим в тело условия
            if (ModelState.IsValid)
            {
                // Создаем экземпляр класса News и присваиваем ему значения
                News news = new News()
                {
                    Id        = Guid.NewGuid(),
                    NewsTitle = model.NewsTitle,
                    NewsBody  = model.NewsBody,
                    NewsDate  = DateTime.Now,
                    UserName  = "******" // В рабочем варианте будет брать имя из User.Identity
                };

                // Далее начинаем обработку изображений
                List <NewsImage> newsImages = new List <NewsImage>();
                foreach (var uploadedImage in uploads)
                {
                    // Если размер входного файла больше 0, заходим в тело условия
                    if (uploadedImage.Length > 0)
                    {
                        // Создаем новый объект класса FileInfo из полученного изображения для дальнейшей обработки
                        FileInfo imgFile = new FileInfo(uploadedImage.FileName);
                        // Приводим расширение к нижнему регистру (если оно было в верхнем)
                        string imgExtension = imgFile.Extension.ToLower();
                        // Генерируем новое имя для файла
                        string newFileName = Guid.NewGuid() + imgExtension;
                        // Пути сохранения файла
                        string pathNormal = "/files/images/normal/" + newFileName; // изображение исходного размера
                        string pathScaled = "/files/images/scaled/" + newFileName; // уменьшенное изображение

                        // В операторе try/catch делаем уменьшенную копию изображения.
                        // Если входным файлом окажется не изображение, нас перекинет в блок CATCH и выведет сообщение об ошибке
                        try
                        {
                            // Создаем объект класса SixLabors.ImageSharp.Image и грузим в него полученное изображение
                            using (Image image = Image.Load(uploadedImage.OpenReadStream()))
                            {
                                // Создаем уменьшенную копию и обрезаем её
                                var clone = image.Clone(x => x.Resize(new ResizeOptions
                                {
                                    Mode = ResizeMode.Crop,
                                    Size = new Size(300, 200)
                                }));
                                // Сохраняем уменьшенную копию
                                await clone.SaveAsync(_appEnvironment.WebRootPath + pathScaled, new JpegEncoder { Quality = 50 });

                                // Сохраняем исходное изображение
                                await image.SaveAsync(_appEnvironment.WebRootPath + pathNormal);
                            }
                        }
                        // Если вдруг что-то пошло не так (например, на вход подало не картинку), то выводим сообщение об ошибке
                        catch
                        {
                            // Создаем сообщение об ошибке для вывода пользователю
                            ModelState.AddModelError("NewsImage", $"Файл {uploadedImage.FileName} имеет неверный формат.");

                            // Удаляем только что созданные файлы (если ошибка возникла не на первом файле)
                            foreach (var image in newsImages)
                            {
                                // Исходные (полноразмерные) изображения
                                FileInfo imageNormal = new FileInfo(_appEnvironment.WebRootPath + image.ImagePathNormal);
                                if (imageNormal.Exists)
                                {
                                    imageNormal.Delete();
                                }
                                // И их уменьшенные копии
                                FileInfo imageScaled = new FileInfo(_appEnvironment.WebRootPath + image.ImagePathScaled);
                                if (imageScaled.Exists)
                                {
                                    imageScaled.Delete();
                                }
                            }

                            // Возвращаем модель с сообщением об ошибке в представление
                            return(View(model));
                        }

                        // Создаем объект класса NewsImage со всеми параметрами
                        NewsImage newsImage = new NewsImage()
                        {
                            Id              = Guid.NewGuid(),
                            ImageName       = newFileName,
                            ImagePathNormal = pathNormal,
                            ImagePathScaled = pathScaled,
                            NewsId          = news.Id
                        };
                        // Добавляем объект newsImage в список newsImages
                        newsImages.Add(newsImage);
                    }
                }

                // Если в процессе выполнения не возникло ошибок, сохраняем всё в БД
                if (newsImages != null && newsImages.Count > 0)
                {
                    await cmsDB.NewsImages.AddRangeAsync(newsImages);
                }
                await cmsDB.News.AddAsync(news);

                await cmsDB.SaveChangesAsync();

                // Редирект на главную страницу
                return(RedirectToAction("Index", "News"));
            }

            // Возврат модели в представление в случае, если запорится валидация
            return(View(model));
        }
Ejemplo n.º 21
0
        public async Task <IActionResult> AddNews(AddNewsViewModel model, IFormFileCollection uploads)
        {
            // Проверяем размер каждого изображения
            foreach (var image in uploads)
            {
                if (image.Length > 2097152)
                {
                    ModelState.AddModelError("Image", "Размер изображения должен быть не более 2МБ.");
                    break;
                }
            }

            if (ModelState.IsValid)
            {
                News news = new News()
                {
                    Id        = Guid.NewGuid(),
                    NewsTitle = model.NewsTitle,
                    NewsBody  = model.NewsBody,
                    NewsDate  = DateTime.Now,
                    UserName  = User.Identity.Name
                };

                // Создаем список изображений
                List <ImageFile> images = new List <ImageFile>();
                foreach (var uploadedImage in uploads)
                {
                    // Присваиваем загружаемому файлу уникальное имя на основе Guid
                    string imageName = Guid.NewGuid() + "_" + uploadedImage.FileName;
                    // Путь сохранения файла
                    string pathNormal = "/files/images/normal/" + imageName; // изображение исходного размера
                    string pathScaled = "/files/images/scaled/" + imageName; // уменьшенное изображение
                    // сохраняем файл в папку files в каталоге wwwroot
                    using (FileStream file = new FileStream(_appEnvironment.WebRootPath + pathNormal, FileMode.Create))
                    {
                        await uploadedImage.CopyToAsync(file);
                    }
                    // Создаем объект класса Image со всеми параметрами
                    ImageFile image = new ImageFile {
                        Id = Guid.NewGuid(), ImageName = imageName, ImagePathNormal = pathNormal, ImagePathScaled = pathScaled, TargetId = news.Id
                    };
                    // Добавляем объект класса Image в ранее созданный список images
                    images.Add(image);

                    // Делаем уменьшенную копию изображения
                    var img         = Image.FromFile(_appEnvironment.WebRootPath + pathNormal);
                    var scaledImage = ImageResize.Scale(img, 300, 300);
                    scaledImage.SaveAs(_appEnvironment.WebRootPath + pathScaled, 50);
                }
                // Сохраняем новые объекты в БД
                await websiteDB.Images.AddRangeAsync(images);

                await websiteDB.News.AddAsync(news);

                await websiteDB.SaveChangesAsync();

                return(RedirectToAction("Index", "Home"));
            }

            // Редирект на случай невалидности модели
            return(View(model));
        }
 public AddNewNewsView()
 {
     InitializeComponent();
     DataContext = new AddNewsViewModel();
 }