2
respostas

Não consigo abrir a página de /Produto/Form RuntimeBinder.RuntimeBinderException

Por favor pessoal, tenho meu codigo com o das aulas enão consigo resolver esse problema. Podem me ajudar, por favor?

Quando executo a página de /Produto/Form


@{
    Layout = null;
}

<!DOCTYPE html> 

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Form</title>
</head>
<body>
    <div> 
        <form action="/CategoriaDoProduto/Adiciona" method="post">
            @Html.ValidationMessage("produto.Invalido")

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

            <label for="preco">Preco:      </label>
            <input id="preco" name="produto.Preco" value="@ViewBag.Produto.Preco" />
            <br>
            <label for="categoria">Categoria:  </label>
            <!--<input id="categoria" name="produto.CategoriaId" />-->
            <select id="categoria" name="produto.CategoriaId"  />
                @foreach (var categoria in ViewBag.Categorias)
                {
                        <option value="@categoria.Id" selected="@categoria.Id.Equals(ViewBag.Produtos.CategoriaId)">
                                @categoria.Nome
                        </option>                    
                }
            </select> 
            <br>
            <label for="quantidade">Quantidade: </label>
            <input id="quantidade" name="produto.Quantidade" value="@ViewBag.Produto.Quantidade" />/>
            <br>
            <label for="descricao">Descricao:  </label>
            <input id="descricao" name="produto.Descricao" value="@ViewBag.Produto.Descricao" />/>
            <br><br>
            <input type="submit" value="Cadastrar" />

        </form>
    </div>
</body>
</html>

o código do ProdutoController

public ActionResult Form()
        {
            CategoriasDAO categoriasDAO = new CategoriasDAO();
            IList<CategoriaDoProduto> categorias = categoriasDAO.Lista();
            ViewBag.Categorias = categorias;
            ViewBag.Produto = new Produto();
            return View();
        }

        [HttpPost]
        public ActionResult Adiciona(Produto produto )
        { 
            int idDaInformatica = 1;
            if(produto.CategoriaId.Equals(idDaInformatica) && produto.Preco < 100)
            {
               ModelState.AddModelError("produto.Invalido", "Informatica com preco abaixo de 100 reais ");
            }
            if(ModelState.IsValid) 
            {  
                ProdutosDAO dao = new ProdutosDAO();
                dao.Adiciona(produto);

                return RedirectToAction("Index", "Produto"); 
            }
            else
            {
                ViewBag.Produto = produto; 
                CategoriasDAO categoriasDAO = new CategoriasDAO();
                ViewBag.Categorias = categoriasDAO.Lista();
                return View("Form");
            }
        }

Recebo oa avisos: Warning 1 Element 'option' cannot be nested inside element 'form'. C:\Users\gg\Desktop\Alura\CaelumEstoque\Views\Produto\Form.cshtml 33 26 CaelumEstoque

Warning 2 End tag is missing matching start tag C:\Users\gg\Desktop\Alura\CaelumEstoque\Views\Produto\Form.cshtml 37 15 CaelumEstoque

<select id="categoria" name="produto.CategoriaId"  />
                @foreach (var categoria in ViewBag.Categorias)
                {
                        <option value="@categoria.Id" selected="@categoria.Id.Equals(ViewBag.Produtos.CategoriaId)">
                                @categoria.Nome
                        </option>                    
                }
 </select>

e erro em: http://localhost:51270/Produto/Form **Nao executa

An exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' occurred in System.Core.dll but was not handled in user code

Additional information: Uma referencia null nao pode ser executada

2 respostas

Graziela, na linha de código


<select id="categoria" name="produto.CategoriaId"  />

Tá vendo essa barra no fim? Você está abrindo e fechando o select e depois o foreach tenta adicionar um option, mas direto no form e não no select. Tire essa barra que vai funcionar :)

Olá Gabriel, obrigadissimo pela resposta.

Na verdade vi este encerramento da tag depois de resolver o problema, e mesmo com isto ai, executou na mesma.

o problema estava aqui

``` <form action="/CategoriaDoProduto/Adiciona" method/paste e troquei as Views de Produto e Categoria :)

Valeu :)