Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

UpdateQuantidade() não recebe os valores

Olá, estou com problemas para receber os dados no método UpdateQualidade na classe controller. Já vi as postagens com relação a esse problema mas não consegui solucioná-lo. Estou seguindo a formação usando .net 6, sei que algumas coisas são diferentes, já tive que fazer ajustes várias vezes, porém dessa vez não sei o que ajustar. A chamada do jquery:

    postQuantidade(data) {
        console.log('entrei');
        console.log(data);
        $.ajax({
            url: '/pedido/updatequantidade',
            type: 'POST',
            contentType: 'application/json',
            data: JSON.stringify(data),
        });
    }

Aqui no método eu coloquei uns consoles pra saber se ele é chamado:

  [HttpPost]
  public void UpdateQuantidade([FromBody] ItemPedido itemPedido)
  {
    System.Console.WriteLine("");
    System.Console.WriteLine($"fui chamado pelo pedido: {itemPedido.Id}, quantidade: {itemPedido.Quantidade}");
    System.Console.WriteLine("");

    _itemRepository.UpdateQuantidade(itemPedido);
  }

Vi alguém comentando que poderia ser algo em relação a desserialização do json, então tentei alterar as configurações:

builder.Services.AddControllersWithViews().AddJsonOptions(options =>
        {
          options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
          options.JsonSerializerOptions.PropertyNamingPolicy = null;
          options.JsonSerializerOptions.IncludeFields = true;
        });

quando rodo o projeto e clico para adicionar o console retorna: resposta do console: fui chamado pelo pedido  0 quantidade 0

Porém nada funciona. Alguém tem idéia de como resolver?

3 respostas

Mesmo utilizando o NewtonsoftJson o problema persiste.

Então, pelo que tudo indica, você precisa efetivamente receber os parâmetros recebidos pelo ajax. Para isso há um passo extra após essa consulta assíncrona.

postQuantidade(data) { $.ajax({ url: '/pedido/updatequantidade', type: 'POST', contentType: 'application/json', data: JSON.stringify(data) }).done(function (response) { let itemPedido = response.itemPedido; let linhadoItem = $('[item-id' + itemPedido.id + ']'); linhadoItem.find('input').val(itemPedido.quantidade); linhadoItem.find('[sutotal]').html((itemPedido.subtotal));

solução!

Anderson muito obrigado por tentar ajudar, mas acho que eu tinha comido bola em alguma etapa da instalação do newtonsoft. Instalei ele na versão 6<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6" /> e adicionei ao build services builder.Services.AddControllersWithViews().AddNewtonsoftJson();. Agora funciona normalmente.