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

05 - Validando um produto com Model Validation

O objetivo é enviar o produto previamente informado por meio de ViewBag (Em caso de itens que não passaram na validação), contudo, quando recebo a requisição não tem informação de "campo obrigatório" e o produto também não "aparece" no formulário.

Segue código:

Controller:

public ActionResult Form()
{
    CategoriasDAO produtoDao = new CategoriasDAO();
    IList<CategoriaDoProduto> categorias = produtoDao.Lista();
    ViewBag.Produto = new Produto();
    ViewBag.vbcategorias = categorias;
    return View();
}

[HttpPost]
public ActionResult Adiciona(Produto produto)
{
    if (produto.CategoriaId == 1 && produto.Preco < 100)
    {
        ModelState.AddModelError("produto.Invalido", "Informática com preço abaixo de 100 reais");
    }

    if (ModelState.IsValid)
    {
        ProdutosDAO produtoDao = new ProdutosDAO();
        produtoDao.Adiciona(produto);

        return RedirectToAction("Index");
    }
    else
    {
        CategoriasDAO categoriasDao = new CategoriasDAO();
        ViewBag.Produto = produto;
        ViewBag.Categorias = categoriasDao.Lista();

        return RedirectToAction("Form");
    }
}

View:

<form action="/Produto/Adiciona" method="post">

    @Html.ValidationMessage("produto.Invalido")

    <label for="nome">Nome:</label>
    <input id="nome" name="produto.Nome" value="@ViewBag.Produto.Nome" />
    @Html.ValidationMessage("produto.Nome") </form>

Model:

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

Agradeço desde já.

5 respostas

Júlio,

Eu editei o seu post para usar a formatação do site para melhorar a compreensão do seu código. Há dois problemas nele que eu vi e não corrigi para ficar claro para você o que deve ser feito:

1) Sua classe model está escrita errada:

public class Produto() {
    // ...
}

Esses parêntesis são somente para métodos.

Quanto a validação, você não precisa colocar o Required quando coloca o StringLength. Tente somente com o StringLength.

Ola, Arthur!

Quanto ao primeiro erro, acredito que tenha sido erro de digitação de minha parte porque o Visual Studio sinaliza esse tipo de erro na compilação. Quanto ao segundo, realmente é uma validação redundante. Quando chegar em casa efetuarei esse teste.

Obrigado pela formatação do código e por seu interesse em me ajudar. Ótimo dia!

O problema não é esse. Segui a sugestão e continua da mesma forma.

Vou seguir adiante com o curso e volto nesse tópico posteriormente como revisão ou se impactar no aprendizado de itens futuros.

solução!
<form action="~/Produto/Adiciona" method="post">

Obrigado pela ajuda, Edgar.