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

Problema com o ModelState.IsValid

Oi! Por algum motivo o meu ModelState.IsValid está sempre retornando false. Eu até comentei os Attributes na classe Produto e mesmo assim ele continua false! Podem me ajudar? Segue código:

Produto.cs

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

        //[Required, StringLength(20)]
        public String Nome { get; set; }

        //[Required]
        public float Preco { get; set; }

        public CategoriaDoProduto Categoria { get; set; }

        public int? CategoriaId { get; set; }

        public String Descricao { get; set; }

        //[Required]
        public int Quantidade { get; set; }
    }

Método Adiciona

     [HttpPost]
        public ActionResult Adiciona(Produto produto)
        {
            if (ModelState.IsValid)
            {
                ProdutosDAO dao = new ProdutosDAO();
                dao.Adiciona(produto);
                return RedirectToAction("Index");

            }
            else
            {
                CategoriasDAO categoriasDAO = new CategoriasDAO();
                ViewBag.Categorias = categoriasDAO.Lista();
                return View("Form");

            }

        }
7 respostas

Acredito que sua classe Produto deva ter que ter um construtor Vazio

Perdão, Vilson. Eu sem querer não coloquei o método inteiro, eu recebo um Produto através de parâmetro.

[HttpPost]
        public ActionResult Adiciona(Produto produto)
        {
            if (ModelState.IsValid)
            {
                ProdutosDAO dao = new ProdutosDAO();
                dao.Adiciona(produto);
                return RedirectToAction("Index");

            }
            else
            {
                CategoriasDAO categoriasDAO = new CategoriasDAO();
                ViewBag.Categorias = categoriasDAO.Lista();
                return View("Form");

            }


        }

Mas tentou colocar o construtor vazio? Tenta ai :)

Um construtor vazio que você se refere seria assim?

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

        [Required, StringLength(20)]
        public String Nome { get; set; }

        [Required]
        public float Preco { get; set; }

        public CategoriaDoProduto Categoria { get; set; }

        public int? CategoriaId { get; set; }

        public String Descricao { get; set; }

        [Required]
        public int Quantidade { get; set; }

        public Produto()
        {

        }
    }

Se for, ainda não funciona :c

solução!

Tentou ver se o parametro Produto não esta vindo em branco?

Descobri o problema! O categoriaId do Produto estava vindo null, porque eu tinha esquecido um @ lá no .cshtml. Agora está funcionando perfeito! Mas sabe me dizer o porquê de não estar funcionando já que o categoriaId não estava como [Required]?

Talvez ele entenda como sendo uma chave, mas vai saber =/

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