1
resposta

Diminuir estoque com quantidade inferior a zero.

Verifiquei que era possível remover a quantidade e o produto ter seu estoque negativo. Resolvi implementar o método ModelState, como aprendido nas aulas anteriores. Meu método ficou assim:

public ActionResult DecrementaQtd(int id)
        {
            ProdutosDAO dao = new ProdutosDAO();
            Produto produto = dao.BuscaPorId(id);
            if (produto.Quantidade <= 0 )
            {
                ModelState.AddModelError("produto.QtdBaixa", "Estoque baixo");
            }
            if (ModelState.IsValid)
            {
                produto.Quantidade--;
                dao.Atualiza(produto);
                return Json(produto);
            }
            else
            {
                return View("Index");
            }
        }

Até então ele entende a lógica e não faz a operação, ele entende que tem um erro. Mas a mensagem não aparece na tela. Essa opção só funciona com formulários? Coloquei na minha tabela:

<table class="table table-hover">
    @Html.ValidationMessage("produto.QtdBaixa")

E mesmo assim não exibe a mensagem. Gostaria de entender o porque e se não for possível dessa maneira, qual é a forma mais adequada? Retornando o erro pelo Json? Obrigado

1 resposta

Olá, Fábio!

Sua dedução está correta: o ValidationMessag só funciona se os campos estiverem dentro do form para aquela action e aquele controller. Caso contrário, você precisa de JavaScript / AJAX para ver o erro. E sim, nesse caso provavelmente você precisa do JSON se tiver que trabalhar com objetos trafegando do cliente para o servidor e vice-versa. (Nessas horas a gente dá valor pras coisas que só o Form faz pra gente! ;-)

Nos avise se tiver sucesso ou não dessa forma. Boa sorte e bons estudos!