Pessoal, utilizando a ViewBag, não estou conseguindo inserir os produtos no Banco de Dados. Aparentemente o código das Actions Form e Adiciona estão corretos, bem como o código da View Form; no entanto, ao preencher o formulário e enviá-lo, sou levado à página de listagem dos produtos, e nela não consta o que acabei de cadastrar. Mesmo preenchendo com erros de validação, sou levado à página de listagem, ao invés de retornar ao formulário para as devidas correções. Seguem os códigos abaixo:
public ActionResult Form()
{
CategoriaDoProduto categoriaVazia = new CategoriaDoProduto();
Produto produtoVazio = new Produto
{
Categoria = categoriaVazia
};
ViewBag.Produto = produtoVazio;
CategoriaDao dao = new CategoriaDao();
List<CategoriaDoProduto> categorias = dao.Lista();
return View(categorias);
}
[HttpPost]
public ActionResult Adiciona(Produto produto)
{
int idInformatica = 1;
if (produto.Categoria.Id == idInformatica && produto.Preco < 100)
{
ModelState.AddModelError("produto.InformaticaComPrecoErrado", "Produtos da categoria informática devem ter preço maior do que 100");
}
if (ModelState.IsValid)
{
ProdutoDao dao = new ProdutoDao();
dao.Salva(produto);
return RedirectToAction("Index");
}
else
{
ViewBag.Produto = produto;
CategoriaDao dao = new CategoriaDao();
List<CategoriaDoProduto> categorias = dao.Lista();
return View("Form", categorias);
}
}
<form action="/Produto/Adiciona" method="post" >
@Html.ValidationMessage("produto.InformaticaComPrecoErrado")
<label> Nome do produto: <input name="produto.Nome" value="@ViewBag.Produto.Nome" /> </label>
@Html.ValidationMessage("produto.Nome")
<label> Preço: <input name="produto.Preco" value="@ViewBag.Produto.Preco" /> </label>
<label> Quantidade: <input name="produto.Quantidade" value="@ViewBag.Produto.Quantidade" /></label>
<label> Descrição: <input name="produto.Descricao" value="@ViewBag.Produto.Descricao" /></label>
<label>
Categoria:
<select name="produto.Categoria.Nome">
@foreach (var categoria in Model ) {
if (categoria.Id.Equals(ViewBag.Produto.Categoria.Id)) {
<option value="@categoria.Id" selected="selected"> @categoria.Nome</option>
}
else {
<option value="@categoria.Id"> @categoria.Nome</option>
}
}
</select>
</label>
<input type="submit" value="Enviar" />
</form>
`