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

Dúvida no Ex. 6 da Aula 5 - Validando um produto com Model Validation

Eu fiz tudo corretamente, igual feito na explicação, mas não mostra as mensagens de erro, segue abaixo os códigos da aplicação:

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

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

        public float Preco { get; set; }

        public CategoriaDoProduto Categoria { get; set; }

        public int? CategoriaId { get; set; }

        public String Descricao { get; set; }

        public int Quantidade { get; set; }
    }

--------------------------------------------------------------
//ProdutoController
[HttpPost]
        public ActionResult Adiciona(Produto produto)
        {
            if (ModelState.IsValid)
            {
                this.produtosDAO.Adiciona(produto);
                return RedirectToAction("Index", "Produto");
            }
            else
            {
                CategoriasDAO categoriasDAO = new CategoriasDAO();
                IList<CategoriaDoProduto> categorias = categoriasDAO.Lista();
                ViewBag.Categorias = categorias;
                return RedirectToAction("Form", "Produto");
            }
        }
-----------------------------------------------------------------

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Form</title>
</head>
<body>
    <form action="/Produto/Adiciona" method="post">
        <label for="nome">Nome:</label>
        <input id="nome" name="produto.Nome" />
        @Html.ValidationMessage("produto.Nome")
        <br /><br />
        <label for="preco">Preço:</label>
        <input id="preco" name="produto.Preco" />
        @Html.ValidationMessage("produto.Preco")
        <br /><br />
        <label for="descricao">Descrição:</label>
        <input id="descricao" name="produto.Descricao" />
        @Html.ValidationMessage("produto.Descricao")
        <br /><br />
        <label for="quantidade">Quantidade:</label>
        <input id="quantidade" name="produto.Quantidade" />
        @Html.ValidationMessage("produto.Quantidade")
        <br /><br />
        <label for="categoria">Categoria:</label>
        <select id="categoria" name="produto.CategoriaId">
            @foreach(var categoria in ViewBag.Categorias)
            {
                <option value="@categoria.Id">@categoria.Nome</option>
            }
        </select>
        @Html.ValidationMessage("produto.CategoriaId")
        <br /><br />
        <input type="submit" value="Cadastrar" />
    </form>
</body>
</html>
2 respostas
solução!

Descobri meu erro. Na controller eu estava retornando um RedirectToAction dentro do else, ao invés de retornar um View(). A Controller corrigida:

 [HttpPost]
        public ActionResult Adiciona(Produto produto)
        {
            if (ModelState.IsValid)
            {
                this.produtosDAO.Adiciona(produto);
                return RedirectToAction("Index", "Produto");
            }
            else
            {
                CategoriasDAO categoriasDAO = new CategoriasDAO();
                IList<CategoriaDoProduto> categorias = categoriasDAO.Lista();
                ViewBag.Categorias = categorias;
                return View("Form");
            }
        }

Valeu pela informação Paulo, me ajudou!