2
respostas

Erro no servidor do Aplicativo

Eu escrevi o código da aula, exatamente igual ao que o instrutor fez, fui seguindo ele ao longo do processo. no final o código ficou assim

Código das Actions

public ActionResult Form()
        {
            CategoriasDAO dao = new CategoriasDAO();
            ViewBag.Produto = new Produto();
            ViewBag.Categorias = dao.Lista();
            return View();
        }

        [HttpPost]
        public ActionResult Adiciona(Produto produto)
        {
            int idDaInformatica = 1;
            if (produto.CategoriaId.Equals(idDaInformatica) && produto.Preco < 100)
            {
                ModelState.AddModelError("produto.InformaticaComPrecoInvalido", "Produtos da categoria informática devem ter preço maior do que 100");
            }
            if (ModelState.IsValid)
            {
                ProdutosDAO dao = new ProdutosDAO();
                dao.Adiciona(produto);
                return RedirectToAction("Index");
            }
            else
            {
                ViewBag.Produto = produto;
                CategoriasDAO categoriasDAO = new CategoriasDAO();
                ViewBag.Categorias = categoriasDAO.Lista();
                return View("Form");
            }
        }

E o código da View

<form action="/Produto/Adiciona" method="post">
            @Html.ValidationMessage("produto.InformaticaComPrecoInvalido")

            <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" />
            @Html.ValidationMessage("produto.Preco")

            <label for="quantidade">Quantidade:</label>
            <input id="quantidade" name="produto.Quantidade" value="@ViewBag.Produto.Quantidade" />

            <label for="descricao">Descricao:</label>
            <input id="descricao" name="produto.Descricao" value="@ViewBag.Produto.Descricao" />

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

            <input type="submit" />
        </form>

Mas a página da um erro. Eu retirei todas as values de cada input e ele voltou a funcionar normalmente

Porque com o professor dá certo e comigo não? kkk

Segue código do erro

Erro de Servidor no Aplicativo '/'.

Não é possível fazer associação em tempo de execução em uma referência nula

Descrição: Ocorreu uma exceção sem tratamento durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código. 

Detalhes da Exceção: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: Não é possível fazer associação em tempo de execução em uma referência nula

Erro de Origem: 


Linha 14:     <div> 
Linha 15:         <form action="/Produto/Adiciona" method="post">
Linha 16:             @Html.ValidationMessage("produto.InformaticaComPrecoInvalido")
Linha 17: 
Linha 18:             <label for="nome">Nome:</label>

Arquivo de Origem: c:\Users\6400\Downloads\CaelumEstoque\CaelumEstoque\Views\Produto\Form.cshtml    Linha: 16 

Rastreamento de Pilha: 


[RuntimeBinderException: Não é possível fazer associação em tempo de execução em uma referência nula]
   CallSite.Target(Closure , CallSite , Object ) +115
   System.Dynamic.UpdateDelegates.UpdateAndExecute1(CallSite site, T0 arg0) +629
   ASP._Page_Views_Produto_Form_cshtml.Execute() in c:\Users\6400\Downloads\CaelumEstoque\CaelumEstoque\Views\Produto\Form.cshtml:16
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +198
   System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +104
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +78
   System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +235
   System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) +107
   System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +291
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) +13
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +56
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +420
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +52
   System.Web.Mvc.Async.<>c__DisplayClass28.<BeginInvokeAction>b__19() +173
   System.Web.Mvc.Async.<>c__DisplayClass1e.<BeginInvokeAction>b__1b(IAsyncResult asyncResult) +100
   System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27
   System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +13
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +36
   System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +12
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +22
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +26
   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
   System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__4(IAsyncResult asyncResult, ProcessRequestState innerState) +21
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +28
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9765121
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155
2 respostas

Olá, João!

A action Form do ProdutoController precisa enviar para o cliente a variável ViewBag.produto preenchida.

O erro acontece no código: @ViewBag.Produto.nome. Verifique se você não está passando uma referência nula para @ViewBag.Produto.

Boa sorte e bons estudos!

Ok, até ai eu entendi a lógica do erro

O que eu não entendo é que, eu copiei o código que é passado pra gente no decorrer da aula

Eu tinha feito o meu do meu jeito mas deu esse erro, então eu copiei o código que é passado pra gente e mesmo assim deu o mesmo erro entende?

Na vídeo aula, o código do instrutor fica do mesmo jeito que o meu e compila direitinho, mas o meu não.

Tanto é que eu copiei do git https://github.com/alura-cursos/desenvolvimento-web-asp-net-mvc-5/archive/aula5.zip