Bom dia,
O ModelState.AddModelError não está funcionando na View. Não sei se ele não está adicionando a mensagem de validação na lista dele ou se a parte @Html.ValidationMessage("produto.Invalido") da View não está reconhecendo esse produto.Invalido criado no ProdutoController.
A outra mensagem que vem da validação feita na classe Produto utilizando os validation attributes aparece normalmente.
[Required, StringLength(20)]
public string Nome { get; set; }
No Form.cshtml uso @Html.ValidationMessage("produto.Nome") e funciona. Só com a mensagem de validação criada com o AddModelError que não.
Tentei algumas soluções, mas realmente não faço ideia do que seja. Se alguém puder ajudar fico grato.
Segue código do Controller e da View:
ProdutoController
[HttpPost]
public ActionResult Adiciona(Produto produto)
{
int idDaInformatica = 1;
if (produto.CategoriaId.Equals(idDaInformatica) && produto.Preco < 100)
{
ModelState.AddModelError("produto.Invalido", "Informática com preço abaixo de R$100.");
}
if (ModelState.IsValid)
{
ProdutosDAO dao = new ProdutosDAO();
dao.Adiciona(produto);
return RedirectToAction("Index", "Produto");
}
else
{
CategoriasDAO categoriasDao = new CategoriasDAO();
ViewBag.Categorias = categoriasDao.Lista();
return View("Form");
}
}
Form.cshtml
<form method="post" action="/Produto/Adiciona">
@Html.ValidationMessage("produto.Invalido")
<label for="nome">Nome: </label>
<input id="nome" name="produto.Nome" />
@Html.ValidationMessage("produto.Nome")
<label for="preco">Preço: </label>
<input id="preco" name="produto.Preco" />
<label for="quantidade">Quantidade: </label>
<input id="quantidade" name="produto.Quantidade" />
<label for="descricao">Descrição: </label>
<input id="descricao" name="produto.Descricao" />
<label for="categoria">Categoria: </label>
<select id="categoria" name="categoriaId">
@foreach (var categoria in ViewBag.Categorias)
{
<option value="@categoria.Id">@categoria.Nome</option>
}
</select>
<input type="submit" value="Cadastrar" />
</form>