Problems passing 3 parameters via AJAX request -Asp.net Core MVC

Asked

Viewed 243 times

1

I need to pass 3 parameters to my controller, but the values are not enough:

  • Personal Contact Personal Modelcontact Contact Information: Complex parameter (class with properties);
  • int formaContactIdChange: Simple integer parameter;
  • Personal natureNature: Enum type parameters.

    [HttpPost]
    [Route("pessoa-gerenciar/changeFormaContato")]
    public IActionResult ChangeFormaContato([FromBody] 
    PessoaContatoViewModel pessoaContatoViewModel, int formaContatoIdChange, 
    PessoaNatureza pessoaNatureza)
    {
        //ViewBag.indice_new = indice;
        //return        
        PartialView("~/Views/Pessoa/PessoaContato/_PessoaContatoAdd.cshtml", 
        _pessoaContatoAppService.CreateNew(pessoaNatureza, formaContatoId));
       return null;
    }
    
    var formaContatoIdPrevious = "0";
    $("#div-contatos .row").bind("click", ".sel-forma-contato", function (e) 
     {
    //Forma de contato selecionada antes de alterar
    formaContatoIdPrevious = $(this).closest('.row').find('.sel-forma- 
    contato').val(); 
    }).on("change", ".sel-forma-contato", function (e) {
    //Pegar Índice da row
    var rowIndice = $(this).closest('.row').index();
    
    //Pegando os valores dos Fields
    var pessoaNatureza = $('#pessoaNatureza').val();
    var formaContatoIdChange = $(this).closest('.row').find('.sel-forma- 
     contato').val(); //Forma de contato selecionada depois de alterar
    
    
    var pessoaContatoViewModel = {
        Id: $(this).closest('.row').find('.hid-id').val(),
        PessoaId: $(this).closest('.row').find('.hid-pessoaId').val(),
        FormaContatoId: parseInt(formaContatoIdPrevious),
        FormaContatoTipoId: $(this).closest('.row').find('.sel-contato-tipo').val(),
        Contato: $(this).closest('.row').find('.txt-contato').val(),
        Observacao: $(this).closest('.row').find('.txt-observacao').val(),
        ContatoPrincipal: $(this).closest('.row').find('.ckb-contato-principal').is(":checked")
    };
    
    //Telefone, Celular ou Fax
    switch (formaContatoIdPrevious) {
        case "1":
        case "2":
        case "3":
            var pessoaContatoChamadaViewModel = {
                ChamadaTipo: $(this).closest('.row').find('.sel-chamada-tipo').val(),
                OperadoraChamadaId: $(this).closest('.row').find('.sel-operadora-chamada').val(),
                CodigoDDI: $(this).closest('.row').find('txt-ddi').val(),
                CodigoDDD: $(this).closest('.row').find('txt-ddd').val(),
                Ramal: $(this).closest('.row').find('txt-ramal').val()
            };
            pessoaContatoViewModel.PessoaContatoChamadaViewModel = {};
            pessoaContatoViewModel.PessoaContatoChamadaViewModel = pessoaContatoChamadaViewModel;
    
            break;
    
        case "5": //E-mail
            var pessoaContatoCorreioEletronicoViewModel = {
                UsarParaNotaFiscalEmitida: $(this).closest('.row').find('ckb-usar-nf-emitida').is(":checked"),
                UsarParaOrdemCompra: $(this).closest('.row').find('ckb-usar-ordem-compra').is(":checked"),
                UsarParaPedidoVenda: $(this).closest('.row').find('ckb-usar-pedido-venda').is(":checked"),
                UsarParaMarketing: $(this).closest('.row').find('ckb-usar-marketing').is(":checked")
            };
            pessoaContatoViewModel.PessoaContatoCorreioEletronicoViewModel = {};
            pessoaContatoViewModel.PessoaContatoCorreioEletronicoViewModel = pessoaContatoCorreioEletronicoViewModel;
    
            break;
    
        case "7": //Blog e Mídia Social
        case "8":
            var pessoaContatoMidiaSocialViewModel = {
                MidiaSocialId: $(this).closest('.row').find('sel-midia-social').val()
            };
            pessoaContatoViewModel.PessoaContatoMidiaSocialViewModel = {};
            pessoaContatoViewModel.PessoaContatoMidiaViewModel = pessoaContatoMidiaSocialViewModel;
            break;
    }
    
    var dados = { pessoaContatoViewModel: pessoaContatoViewModel, formaContatoIdChange: formaContatoIdChange, pessoaNatureza: pessoaNatureza };
    
    $.ajax({
        url: "/pessoa-gerenciar/changeFormaContato",
        type: "POST",
        data: JSON.stringify({ pessoaContatoViewModel: pessoaContatoViewModel, formaContatoIdChange: formaContatoIdChange, pessoaNatureza: pessoaNatureza }),
        contentType: "application/json",
        dataType: "json",
        success: function (result) {
            formaContatoIdPrevious = "0";
            alert('ok');
        },
        error: function () {
            formaContatoIdPrevious = "0";
            alert("Oops! Algo deu errado.");
        }
    });
    
    formaContatoIdPrevious = "0";
    

    });

inserir a descrição da imagem aqui

inserir a descrição da imagem aqui

inserir a descrição da imagem aqui

Someone knows what’s wrong?

  • Is it because you are using the same parameter and variable names.

  • What is presenting in Network in Chrome Devtools, for example? How is it being sent? And what response is it returning?

1 answer

0


By your AJAX call, you are sent something like this:

 public class PessoaDTO {

        public PessoaContatoViewModel PessoaContatoViewModel { get; set; }
        public int FormaContatoIdChange { get; set; }
        public PessoaNatureza PessoaNatureza { get; set; }

    }

Try it then:

   [HttpPost()]
    [Route("pessoa-gerenciar/changeFormaContrato")]
    public IActionResult ChangeFormaContato([FromBody] PessoaDTO pessoaDTO) {
        return Ok();
    }

Browser other questions tagged

You are not signed in. Login or sign up in order to post.