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

Introdução ao ASP NET MVC - 9 AJAX - FUNÇÃO DECREMENTA NAO ESTA DREMENTANDO VALOR DE QUANTIDADE PRODUTO E NAO ATUALIZA TELA USANDO AJAX

Não esta funcionando a função decrementa no exercício sobre AJAX segue controller produto e a view Index:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using CaelumEstoque.DAO;
using CaelumEstoque.Models;

namespace CaelumEstoque.Controllers
{
    public class ProdutoController : Controller
    {
        // GET: Produto
        [Route("produtos", Name="ListaProdutos")]
        public ActionResult Index()
        {
            ProdutosDAO dao = new ProdutosDAO();
            IList<Produto> produtos =  dao.Lista();
            return View(produtos);
        }

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

        [HttpPost]
        public ActionResult Adiciona(Produto produto)
        {
            int tipoInfo = 1;
            if(produto.CategoriaId.Equals(tipoInfo) && produto.Preco<100)
            {
                ModelState.AddModelError("produto.Invalido", "Produto de informatica com preco menor que 100");
            }

            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");

            }
        }

        [Route("produtos/{id}", Name="VisualizaProduto")]
        public ActionResult Visualiza (int id)
        {
          ProdutosDAO dao = new ProdutosDAO();
          Produto produto = dao.BuscaPorId(id);
          ViewBag.Produto = produto;
          return View();
        }

        public ActionResult DecrementaQtd (int id)
        {
            ProdutosDAO dao = new ProdutosDAO();
            Produto produto = dao.BuscaPorId(id);
            produto.Quantidade--;
            dao.Atualiza(produto);
            return Json(produto);
        }

    }
}

Index:

@model IList<CaelumEstoque.Models.Produto>

        <table class="table table-hover">
            <thead>
                <tr>
                    <th>Id</th>
                    <th>Nome</th>
                    <th>Quantidade</th>
                </tr>
            </thead>
            <tbody>
                @foreach (var produto in Model)
                {
                    <tr>
                        <td>@produto.Id</td>
                        <td>
                            @Html.RouteLink(produto.Nome, "VisualizaProduto", new { id = produto.Id })
                        </td>
                        <td id="quantidade@(produto.Id)">@produto.Quantidade</td>
                        <td>
                           <a href="#" onclick="decrementa(@produto.Id);">Decrementar</a>
                        </td>
                    </tr>
                }
            </tbody>
        </table>

    <script type="text/javascript" src="~/Scripts/jquery-1.10.2.js"></script>
    <script type="text/javascript">

        function decrementa(produtoId)
        {
            var url = "@Url.Action("DecrementaQtd", "Produto")";
            $.post(url, { id: produto.Id } , atualiza);
        }

        function atualiza(resposta)
        {
            $("#quantidade" + resposta.Id).html(resposta.Quantidade);
        }
    </script>
1 resposta
solução!

Oi

O problema está dentro da função decrementa do seu código javascript, nela você recebe um argumento chamado produtoId mas no código, você está tentando utilizar uma variável chamada produto.Id para mandar o parâmetro da requisição ajax.