public IActionResult AddNewBook(BookModel mv) { if (ModelState.IsValid) { if (mv.CoverPhoto != null) { string fileName = Guid.NewGuid().ToString() + "_" + mv.CoverPhoto.FileName; string folder = @"book\cover\" + fileName; string serverFolder = Path.Combine(_host.WebRootPath, folder); UploadFile(serverFolder, mv.CoverPhoto); mv.FilePath = fileName; } if (mv.CoverPhotos != null) { mv.Gallery = new List <GalleryModel>(); foreach (var item in mv.CoverPhotos) { string fileName = Guid.NewGuid().ToString() + "_" + item.FileName; string folder = @"book\gallery\" + fileName; string serverFolder = Path.Combine(_host.WebRootPath, folder); UploadFile(serverFolder, item); mv.Gallery.Add(new GalleryModel { Name = fileName, URL = folder.Substring(0, folder.LastIndexOf(@"\")) }); } } Book bk = mv.FromModel(); bk.BookGalleries = new List <BookGallery>(); mv.Gallery.ForEach(x => bk.BookGalleries.Add(new BookGallery { BookId = bk.Id, Name = x.Name, URL = x.URL, Id = 0, Book = bk })); _repo.AddNewBook(bk); var savedToDB = _repo.SaveChanges(); if (savedToDB && bk.Id > 0) { return(RedirectToAction(nameof(AddNewBook), new { isSuccess = savedToDB, bid = bk.Id })); } } else { var errors = ModelState.Select(x => x.Value.Errors) .Where(y => y.Count > 0) .ToList(); var message = string.Join(" | ", ModelState.Values .SelectMany(v => v.Errors) .Select(e => e.ErrorMessage)); } ViewBag.Languages = new SelectList(GetLanguages(), "Id", "Name" ); ViewBag.IsSuccess = false; //this will be used when save is called ViewBag.Id = 0; ModelState.AddModelError("", "this error is coming from controller"); return(View()); }