Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Dúvida com o SaveChanges() do Entity Framework

Como faço para editar um registro após altera-lo no formulário? Estou fazendo da seguinte forma:

Formulario HTML

 <form action="Salvar" method="post">
            <input hidden id="Id" name="Id" value="@ViewBag.CadMunicipio.Id" />
            <label for="descricao">Nome:</label>
            <input id="descricao" name="descricao" value="@ViewBag.CadMunicipio.Descricao" class="form-control" />


   <input type="submit" value="Salvar" />

Controller

public ActionResult Salvar(CadMunicipio municipio)
        {

            if (ModelState.IsValid)
            {
                municipioDAO.Salva(municipio);
                return RedirectToAction("Form");
            }
            else
            {
                return RedirectToAction("Form");

            }
        }

DAO

public void Salva(CadMunicipio municipio)
        {

            context.Entry(municipio).State = EntityState.Modified;
            context.SaveChanges();

        }

Porém o EF não está salvando as alterações do registro

4 respostas

Olá Osvalcir,

pode me mandar o código do método do controller que chega no formulário e o modelo completo do CadMunicipio? Chuto 2 problemas que podem estar acontecendo aqui, ou o Id não está chagando no formulário ou então ele está passando por algum problema de validação.

Lucas, segue o controller e entidade.

Esse é o MunicipioController

    public class MunicipioController : Controller
    {
        private MunicipioDAO municipioDAO;

        public MunicipioController(MunicipioDAO municipioDAO)
        {
            this.municipioDAO = municipioDAO;

        }

        public ActionResult Form()
        {
            IList<CadMunicipio> municipios = municipioDAO.Lista();
            return View(municipios);
        }
        public ActionResult Adicionar(CadMunicipio municipio)
        {
            if (ModelState.IsValid)
            {
                municipioDAO.Adiciona(municipio);
                return RedirectToAction("Form");
            }
            else
            {
                return View("Form", municipio);
            }

        }

        public ActionResult Excluir(int Id)
        {
            CadMunicipio municipio;
            municipio = municipioDAO.BuscaPorId(Id);

            municipioDAO.Exclui(municipio);

            return RedirectToAction("Form");
        }

        public ActionResult Editar(int Id)
        {
            ViewBag.CadMunicipio = municipioDAO.BuscaPorId(Id);
            return View();
        }

        public ActionResult Salvar(CadMunicipio municipio)
        {

            if (ModelState.IsValid)
            {
                municipioDAO.Salva(municipio);
                return RedirectToAction("Form");
            }
            else
            {
                return RedirectToAction("Form");

            }
        }
    }

Esse aqui é o CadMunicipio

    public class CadMunicipio
    {
        public int Id { get; set; }

        public string Descricao { get; set; }

        [DefaultValue(true)]
        public bool Status { get; set; }
    }

As unicas coisas que eu peguei que estão estranhas são no cshtml de editar, que faltou a definição de type envolta do hidden type="hidden" e também a tag que fecha o form </form>.

Outra coisa que dá para melhorar, é que no else do método Salvar seria mais interessante voltar para a página de edição do que ir para a página de Form. Então fazer:

return View("Editar");
solução!

Lucas, achei aqui o problema

Na real estava no Action do Form "Editar.CSHTML"

Quando dava o submit no form por algum motivo o link ficava assim...

http://localhost:51771/Municipio/Editar/Salvar

Ai resolvi colocando no fechamento do form assim...

<input type="submit" formaction="/Municipio/Salvar" value="Salvar" />

Agora deu certo!

Obrigado mesmo assim Lucas!

Abraço e até a próxima.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software