A aplicação não está funcionado. Quando clico em Decrementar Quantidade, nada acontece. No console do Chrome está aparecendo o seguinte erro:
event.returnValue is deprecated. Please use the standard event.preventDefault() instead.
3Uncaught Error: Error calling method on NPObject.
E ao clicar em Decrementar Quantidade aparece:
POST http://localhost:49653/Produto/DecrementaQuantidade 500 (Internal Server Error)
Erro de Servidor no Aplicativo '/'.
The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult DecrementaQuantidade(Int32)' in 'CaelumEstoque.Controllers.ProdutoController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter. Nome do parâmetro: parameters
Segue o código da aplicação:
public ActionResult DecrementaQuantidade(int id)
{
ProdutoDao dao = new ProdutoDao();
Produto produto = dao.BuscaPorId(id);
if (produto.Quantidade > 0)
{
produto.Quantidade--;
dao.Atualiza(produto);
}
return Json(produto);
}
@model List<CaelumEstoque.Models.Produto>
<table>
<thread>
<tr>
<th>Id</th>
<th>Nome do Produto</th>
<th>Preco</th>
<th>Quantidade</th>
<th></th>
</tr>
</thread>
<tbody>
@foreach (var produto in Model)
{
<tr>
<td>@produto.Id</td>
<td>@Html.RouteLink(produto.Nome, "VisualizaProdutos", new { id = produto.Id })</td>
<!--<td>@Html.ActionLink(produto.Nome, "Visualiza", new { id = produto.Id })</td>
-->
<td>@produto.Preco</td>
<td id="quantidade_(@produto.Id)">
@produto.Quantidade
</td>
<td>
<a href="#" onclick="decrementaQuantidade(@produto.Id)">
Decrementar Quantidade
</a>
</td>
</tr>
}
</tbody>
</table>
<script type="text/javascript">
function atualizaQuantidade(produto) {
var elementoQuantidade = $("#quantidade_" + produto.Id);
elementoQuantidade.html(produto.Quantidade);
}
function decrementaQuantidade(produtoId) {
var parametros = {
produtoId : produtoId
}
$.post("@Url.Action("DecrementaQuantidade", "Produto")", parametros, atualizaQuantidade);
return false;
}
</script>