Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Aula 05

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>
1 resposta
solução!

Depois de abrir a dúvida aqui, eu achei o erro:

Coloquei [Required, StringLength(60)] para o Id...