// GET: Pokemons/Edit
        public ActionResult Edit(Guid?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            var pokemon = _pokemonContext.Pokemons
                          .Include(p => p.PokemonTypes)
                          .SingleOrDefault(p => p.Id == id);

            PopulateAssignedTypeData(pokemon);

            if (pokemon == null)
            {
                return(NotFound());
            }
            var pokemonEditVm = new PokemonEditVm
            {
                Id             = pokemon.Id,
                HasAllolanForm = pokemon.HasAllolanForm,
                ImgUrl         = pokemon.ImgUrl,
                Description    = pokemon.Description,
                location       = pokemon.Location,
                Name           = pokemon.Name,
            };

            return(View(pokemonEditVm));
        }
        public ActionResult Edit(Guid id, PokemonEditVm pokemonEditVm, string[] selectedTypes)
        {
            if (id != pokemonEditVm.Id)
            {
                return(NotFound());
            }
            var pokemonToUpdate = _pokemonContext.Pokemons
                                  .Include(p => p.PokemonTypes)
                                  .ThenInclude(pt => pt.Type)
                                  .Where(p => p.Id == id)
                                  .Single();


            if (ModelState.IsValid)
            {
                try
                {
                    pokemonToUpdate.Name           = pokemonEditVm.Name;
                    pokemonToUpdate.Location       = pokemonEditVm.location;
                    pokemonToUpdate.Description    = pokemonEditVm.Description;
                    pokemonToUpdate.HasAllolanForm = pokemonEditVm.HasAllolanForm;

                    if (pokemonEditVm.UploadedImage != null)
                    {
                        DeletePokeImage(pokemonToUpdate);
                        pokemonToUpdate.ImgUrl = SavePokeImg(pokemonEditVm.UploadedImage);
                    }

                    UpdatePokemonTypes(selectedTypes, pokemonToUpdate);
                    _pokemonContext.Update(pokemonToUpdate);
                    _pokemonContext.SaveChanges();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!PokemonExists(pokemonEditVm.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            PopulateAssignedTypeData(pokemonToUpdate);
            return(View(pokemonEditVm));
        }