Exemplo n.º 1
0
        public IActionResult Edit(int id, Pelicula pelicula, List <int> generoIds)
        {
            if (id != pelicula.Id)
            {
                return(NotFound());
            }

            ValidarNombreExistente(pelicula);
            ValidarGeneros(generoIds);

            if (ModelState.IsValid)
            {
                try
                {
                    var peliculaDb = _context
                                     .Peliculas
                                     .Include(x => x.Generos)
                                     .FirstOrDefault(x => x.Id == id);

                    peliculaDb.Nombre          = pelicula.Nombre;
                    peliculaDb.ClasificacionId = pelicula.ClasificacionId;
                    peliculaDb.Sinopsis        = pelicula.Sinopsis;


                    foreach (var peliculaGenero in peliculaDb.Generos)
                    {
                        _context.Remove(peliculaGenero);
                    }

                    foreach (var generoId in generoIds)
                    {
                        peliculaDb.Generos.Add(new PeliculaGenero {
                            PeliculaId = peliculaDb.Id, GeneroId = generoId
                        });
                    }


                    _context.Update(peliculaDb);
                    _context.SaveChanges();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!PeliculaExists(pelicula.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }

            ViewBag.SelectGeneros         = new MultiSelectList(_context.Generos, nameof(Genero.Id), nameof(Genero.Descripcion));
            ViewBag.SelectClasificaciones = new SelectList(_context.Clasificaciones, "Id", "Descripcion");

            return(View(pelicula));
        }