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

Referencia nula ao tentar salvar produto com Model Validation

Boa tarde a todos!

Meu código está trazendo o seguinte erro ao executá-lo: "Não é possível fazer associação em tempo de execução em uma referência nula".

Percebi que ao retornar para a view form há algum problema de validação, por algum motivo que ainda não consegui descobrir minha aplicação trás o erro na seguinte parte do meu código na View "Form" do controller "Produtos":

@{
    Layout = null;
}

Alguém consegue me dar uma luz? Segue meu código abaixo:

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Form</title>
</head>
<body>
    <div> 
        <form action="/Produto/Adiciona" method="post">

            <label for="nome">Nome:</label>
            <input id="nome" name="produto.Nome" value="@ViewBag.Produtos.Nome"/>
            @Html.ValidationMessage("produto.Nome")

            <label for="preco">Preço:</label>
            <input id="preco" name="produto.Preco" value="@ViewBag.Produtos.Preco" />
            @Html.ValidationMessage("produto.Preco")

            <label for="quantidade">Quantidade:</label>
            <input id="quantidade" name="produto.Quantidade" value="@ViewBag.Produtos.Quantidade" />
            @Html.ValidationMessage("produto.Quantidade")

            <label for="descricao">Descrição:</label>
            <input id="descricao" name="produto.Descricao" value="@ViewBag.Produtos.Descricao" />
            @Html.ValidationMessage("produto.Descricao")

            <label for="categoria">Categoria:</label>
            <select id="categoria" name="produto.CategoriaId" >
                @foreach (var categoria in ViewBag.Categoria)
                {
                    <option value="@categoria.Id" >@categoria.Nome</option>
                }
            </select>

            <input type="submit" value="Cadastrar" />
        </form>
    </div>
</body>
</html>
using CaelumEstoque.DAO;
using CaelumEstoque.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace CaelumEstoque.Controllers
{
    public class ProdutoController : Controller
    {
        // GET: Produto
        public ActionResult Index()
        {
            ProdutosDAO dao = new ProdutosDAO();

            IList<Produto> produto = dao.Lista();

            ViewBag.Produtos = produto;

            return View();
        }

        public ActionResult Form()
        {
            CategoriasDAO categoriasDAO = new CategoriasDAO();

            IList<CategoriaDoProduto> categorias = categoriasDAO.Lista();
            ViewBag.Categoria = categorias;
            ViewBag.Produtos = new Produto();
            return View();
        }

        [HttpPost]
        public ActionResult Adiciona(Produto produto)
        {
            if (ModelState.IsValid)
            {
                ProdutosDAO dao = new ProdutosDAO();
                dao.Adiciona(produto);
                return RedirectToAction("Index");
            }
            else
            {
                ViewBag.Produto = produto;
                CategoriasDAO categoriasDAO = new CategoriasDAO();
                ViewBag.Categoria = categoriasDAO.Lista();
                return View("Form");
            }

        }
    }
}
1 resposta
solução!

Olá pessoal...

Acabei me confundindo e o problema não tinha nada a ver com o layout = null, mas sim porque minha ViewBag de produtos referenciada no controller estava com um nome diferente na View.