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