public async Task <IActionResult> Create([Bind("Id,NameRus,NameKyrg,DictCountryId,Years,DictCinemaRegiserId,DictCinemaDurationId,DictCinemaAgeRestrictionsId,RegistrationDate,CreateDate,ApplicationUserId,CountriesRegisersJson")] ListOfCinematographyCertificates listOfCinematographyCertificates, string CountriesRegisersJson)
        {
            if (ModelState.IsValid)
            {
                _context.Add(listOfCinematographyCertificates);

                await _context.SaveChangesAsync();

                JsonData jsonData = JsonConvert.DeserializeObject <JsonData>(CountriesRegisersJson);

                // страны
                foreach (int CountryId in jsonData.countries)
                {
                    CinemaCountries cinemaC = new CinemaCountries
                    {
                        DictCountryId = CountryId,
                        ListOfCinematographyCertificatesId = listOfCinematographyCertificates.Id
                    };

                    _context.Add(cinemaC);
                    await _context.SaveChangesAsync();
                }

                // режиссеры
                foreach (int RegiserId in jsonData.regisers)
                {
                    CinemaRegisers cinemaR = new CinemaRegisers
                    {
                        DictCinemaRegiserId = RegiserId,
                        ListOfCinematographyCertificatesId = listOfCinematographyCertificates.Id
                    };

                    _context.Add(cinemaR);
                    await _context.SaveChangesAsync();
                }

                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }

            ViewData["DictCinemaAgeRestrictionsId"] = new SelectList(_context.DictCinemaAgeRestrictions, "Id", "Name", listOfCinematographyCertificates.DictCinemaAgeRestrictionsId);
            ViewData["DictCountryId"]        = new SelectList(_context.DictCountry, "Id", "Name");
            ViewData["DictCinemaDurationId"] = new SelectList(_context.DictCinemaDuration, "Id", "Name", listOfCinematographyCertificates.DictCinemaDurationId);
            ViewData["DictCinemaRegiserId"]  = new SelectList(_context.DictCinemaRegiser, "Id", "FullName");

            return(View(listOfCinematographyCertificates));
        }
        public async Task <IActionResult> Edit(int id, [Bind("Id,NameRus,NameKyrg,DictCountryId,Years,DictCinemaRegiserId,DictCinemaDurationId,DictCinemaAgeRestrictionsId,RegistrationDate,CreateDate,ApplicationUserId,CountriesRegisersJson")] ListOfCinematographyCertificates listOfCinematographyCertificates, string CountriesRegisersJson)
        {
            if (id != listOfCinematographyCertificates.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    string uid = HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value;
                    listOfCinematographyCertificates.ApplicationUserId = uid;
                    _context.Update(listOfCinematographyCertificates);
                    await _context.SaveChangesAsync();

                    // для начала удалить старые данные
                    var listCinemaC = _context.CinemaCountries.Where(a => a.ListOfCinematographyCertificatesId == id).ToList();
                    foreach (var item in listCinemaC)
                    {
                        _context.CinemaCountries.Remove(item);
                        await _context.SaveChangesAsync();
                    }
                    var listCinemaR = _context.CinemaRegisers.Where(a => a.ListOfCinematographyCertificatesId == id).ToList();
                    foreach (var item in listCinemaR)
                    {
                        _context.CinemaRegisers.Remove(item);
                        await _context.SaveChangesAsync();
                    }

                    JsonData jsonData = JsonConvert.DeserializeObject <JsonData>(CountriesRegisersJson);

                    // страны
                    foreach (int CountryId in jsonData.countries)
                    {
                        CinemaCountries cinemaC = new CinemaCountries
                        {
                            DictCountryId = CountryId,
                            ListOfCinematographyCertificatesId = listOfCinematographyCertificates.Id
                        };

                        _context.Add(cinemaC);
                        await _context.SaveChangesAsync();
                    }

                    // режиссеры
                    foreach (int RegiserId in jsonData.regisers)
                    {
                        CinemaRegisers cinemaR = new CinemaRegisers
                        {
                            DictCinemaRegiserId = RegiserId,
                            ListOfCinematographyCertificatesId = listOfCinematographyCertificates.Id
                        };

                        _context.Add(cinemaR);
                        await _context.SaveChangesAsync();
                    }
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!ListOfCinematographyCertificatesExists(listOfCinematographyCertificates.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }


            // страны
            listOfCinematographyCertificates.CinemaCountries = _context.CinemaCountries
                                                               .Include(c => c.ListOfCinematographyCertificates)
                                                               .Where(c => c.ListOfCinematographyCertificatesId == id)
                                                               .Include(c => c.DictCountry)
                                                               .ToList();

            // режиссеры
            listOfCinematographyCertificates.CinemaRegisers = _context.CinemaRegisers
                                                              .Include(c => c.ListOfCinematographyCertificates)
                                                              .Where(c => c.ListOfCinematographyCertificatesId == id)
                                                              .Include(c => c.DictCinemaRegiser)
                                                              .ToList();

            // selectsLists for Countries
            List <SelectList> cinemaCountries = new List <SelectList>();

            foreach (var item in listOfCinematographyCertificates.CinemaCountries)
            {
                cinemaCountries.Add(new SelectList(_context.DictCountry, "Id", "Name", item.DictCountryId));
            }
            // selecLists for Regisers
            List <SelectList> cinemaRegisers = new List <SelectList>();

            foreach (var item in listOfCinematographyCertificates.CinemaRegisers)
            {
                cinemaRegisers.Add(new SelectList(_context.DictCinemaRegiser, "Id", "FullName", item.DictCinemaRegiserId));
            }

            ViewData["CinemaCountriesIds"] = cinemaCountries;
            ViewData["CinemaRegisersIds"]  = cinemaRegisers;


            ViewData["DictCinemaAgeRestrictionsId"] = new SelectList(_context.DictCinemaAgeRestrictions, "Id", "Name", listOfCinematographyCertificates.DictCinemaAgeRestrictionsId);
            ViewData["DictCountryId"]        = new SelectList(_context.DictCountry, "Id", "Name");
            ViewData["DictCinemaDurationId"] = new SelectList(_context.DictCinemaDuration, "Id", "Name", listOfCinematographyCertificates.DictCinemaDurationId);
            ViewData["DictCinemaRegiserId"]  = new SelectList(_context.DictCinemaRegiser, "Id", "FullName");

            return(View(listOfCinematographyCertificates));
        }