1
resposta

Controller não obtem dados da requisição Ajax

Olá. Saudações a todos!

Estou com dificuldade na solução do meu problema e não encontrei a resposta nos demais tópicos ou mesmo na net .

Quando solicito a requisição Ajax, observo na ferramenta para desenvolvedores do navegador, que os valores do Id e Quantidade são obtidos com êxito, mas quando chegam ao controller, os dados estão zerados. Podem me ajudar, por gentileza?

Código em Carrinho.cshtml

@section Scripts
{
    <script type="text/javascript">
        function clickIncremento(btn) {
            var linhaDoItem = $(btn).parents('[item-id]');
            var itemId = $(linhaDoItem).attr('item-id');
            var novaQtde = $(linhaDoItem).find('input').val();

            var itemPedido = {
                Id: itemId,
                Quantidade: novaQtde
            };

            $.ajax({
                type: 'POST',
                url: '@Url.Action("UpdateQuantidade", "Pedido")',
                contentType: 'application/json; charset=utf-8',
                dataType: 'json',
                data: JSON.stringify(itemPedido)
            }).done(function (response) {
                console.log(response);
            }).fail(function (response) {
                console.log('Error: ' + response);
            });

            debugger;
        }
    </script>
}

Código em PedidoController.cs

        [HttpPost]
        public void UpdateQuantidade([FromBody]ItemPedido itemPedido)
        {
            // Não implementado
        }

Código Completo: CasaDoCodigo.zip

1 resposta

Olá Valdinilson, tudo bem?

Olhei diversas vezes o código, substitui pelo código do Marcelo e quanto ao Ajax e ao Controller, não tem problema nenhum. Tanto que até testei de diversas maneiras diferentes. Mas o que me chamou a atenção é que após ativar o modo debug para Javascript no Visual Studio, a princípio a função UpdateQuantidade() recebe os valores, mas logo após isso, a variável itemPedido, que é recebido como argumento é zerada. Achei bem estranho e fui verificar outros pontos da aplicação e vi que a classe Startup.cs está diferente do projeto padrão e fui ver a versão. O que acontece é que o projeto está em Asp.Net Core 3.1 e pode ser que isso esteja causando algum bug, já que o trato do MVC na versão mais atual é com outras classes e pode ser esse o problema.

Minha recomendação é que pegue o projeto inicial do curso e aplique os códigos nele. Já que essa é a primeira aula.

Seguem os prints:

Com o debugger dinâmico o objeto é preenchido normalmente. E a princípio o os valores realmente chegam no método. Tentei colocar uma variável para ver se armazenava os valores, mas não tive sucesso.

Mas ao passar para o próximo passo já apaga os valores do objeto tanto no Controller, quanto na chamada do Ajax:

Sinceramente, não parece que está muito para problema com o código, mas ou é algum bug da versão ou por ser Asp.Net Core 3.1 deve faltar algo no código para manter o valor.

Espero ter ajudado!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software