Fui seguindo o vídeo da aula e quando fiz as últimas alterações para a validação acabei tendo o seguinte erro em CategoriasDAO.cs, linha 24:
System.InvalidOperationException: 'The property 'Id' is not a String or Byte array. Length can only be configured for String and Byte array properties.'
O erro ocorre no "return" deste método:
public IList<CategoriaDoProduto> Lista()
{
using (var contexto = new EstoqueContext())
{
return contexto.Categorias.ToList();
}
}
ProdutoController.cs :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using CaelumEstoque.DAO;
using CaelumEstoque.Models;
namespace CaelumEstoque.Controllers
{
public class ProdutoController : Controller
{
// GET: Produto
public ActionResult Index()
{
ProdutosDAO dao = new ProdutosDAO();
IList<Produto> produtos = dao.Lista();
ViewBag.Produtos = produtos;
return View();
}
public ActionResult Form()
{
CategoriasDAO categoriasDAO = new CategoriasDAO();
IList<CategoriaDoProduto> categoria = categoriasDAO.Lista();
ViewBag.Categorias = categoria;
return View();
}
[HttpPost]
public ActionResult Adiciona(Produto produto)
{
if (ModelState.IsValid)
{
ProdutosDAO dao = new ProdutosDAO();
dao.Adiciona(produto);
//return View();
return RedirectToAction("Index");
//Se fosse para mandar para outro controller seria ("Index", "Home"), neste exemplo iria para o index de HomeController.
}
else
{
CategoriasDAO categoriasDao = new CategoriasDAO();
ViewBag.categorias = categoriasDao.Lista();
return View("Form");
}
}
}
}
CategoriaCotroller.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using CaelumEstoque.DAO;
using CaelumEstoque.Models;
namespace CaelumEstoque.Controllers
{
public class CategoriaController : Controller
{
// GET: Categoria
public ActionResult Index()
{
return View();
}
public ActionResult Form()
{
CategoriasDAO categoriasDAO = new CategoriasDAO();
IList<CategoriaDoProduto> categoria = categoriasDAO.Lista();
ViewBag.Categorias = categoria;
return View();
}
[HttpPost]
public ActionResult Adiciona(CategoriaDoProduto categoria)
{
return RedirectToAction("Index");
}
}
}
Form.cshtml:
@{
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" />
<br /><br />
<label for="quantidade">Quantidade:</label>
<input id="quantidade" name="produto.Quantidade" />
<br /><br />
<label for="descricao">Descrição:</label>
<input id="descricao" name="produto.Descricao" />
<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>
<br /><br />
<input type="submit" value="Cadastrar" />
</form>
<div>
</div>
</body>
</html>