使用不同类型发出 3 参数 Ajax 请求时出现问题 - Asp.net Core MVC

Problems making a 3-parameter Ajax request with different types - Asp.net Core MVC

我需要使用 3 个参数(一个模型、一个整数和一个枚举)发出一个 Ajax 请求,但是模型的属性为空,整数参数的值为 0,并且枚举。奇怪的是,如果我只是单独传递模型 (personContactViewModel) 并将其转换为 AJAX 查询块(数据:JSON.stringify (personContactViewModel)),它就可以工作。问题是传递 3 个参数,其中 none 有效。有谁知道如何帮助我? 给大家一个拥抱!

[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;
}

public class PessoaContatoViewModel
{
    [Key]
    public int Id { get; set; }

    public int PessoaId { get; set; }

    [DisplayName("Forma de Contato")]
    [Required(ErrorMessage = "Escolha a Forma de Contato")]
    [JsonConverter(typeof(StringEnumConverter))]
    public int FormaContatoId { get; set; }       

    [DisplayName("Forma de Contato")]
    [Required(ErrorMessage = "Selecione uma Forma de Contato")]
    public int FormaContatoTipoId { get; set; }

    [DisplayName("Contato")]
    [Required(ErrorMessage = "O campo Contato é obrigatório")]
    [MaxLength(100, ErrorMessage = "O campo {0} deve ter no máximo {1} caracteres")]
    public string Contato { get; set; }

    [DisplayName("Observação")]
    [MaxLength(150, ErrorMessage = "O campo {0} deve ter no máximo {1} caracteres")]
    public string Observacao { get; set; }

    [DisplayName("Principal")]
    public bool ContatoPrincipal { get; set; }
}

JavaScript:

var pessoaNatureza = $('#pessoaNatureza').val();
var formaContatoIdChange = $(this).closest('.row').find('.sel-forma-contato').val(); //Forma de contato selecionada depois de alterar
var formaContatoAtual = $(this).closest('.row').find('.sel-contato-tipo').val() != '' ? $(this).closest('.row').find('.sel-contato-tipo').val() : '0';
var idAtual = $(this).closest('.row').find('.hid-id').val() != '' ? $(this).closest('.row').find('.hid-id').val() : '0';
var pessoaIdAtual = $(this).closest('.row').find('.hid-pessoaId').val() != '' ? $(this).closest('.row').find('.hid-pessoaId').val() : '0';
var contatoAtual = $(this).closest('.row').find('.txt-contato').val();
var observacaoAtual = $(this).closest('.row').find('.txt-observacao').val();
var contatoPrincipalAtual = $(this).closest('.row').find('.ckb-contato-principal').is(":checked");

var pessoaContatoViewModel = {
    Id: parseInt(idAtual),
    PessoaId: parseInt(pessoaIdAtual),
    FormaContatoId: parseInt(formaContatoIdPrevious),
    FormaContatoTipoId: parseInt(formaContatoAtual),
    Contato: contatoAtual,
    Observacao: observacaoAtual,
    ContatoPrincipal: contatoPrincipalAtual
};

$.ajax({
    url: "/pessoa-gerenciar/changeFormaContato",
    type: "POST",
    data: {pessoaContatoViewModel: JSON.stringify(pessoaContatoViewModel), formaContatoIdChange: formaContatoIdChange, pessoaNatureza: pessoaNatureza},
    contentType: "application/json",
    dataType: "json",

    success: function (result) {
        formaContatoIdPrevious = "0";
    },
    error: function () {
        formaContatoIdPrevious = "0";
        alert("Oops! Algo deu errado.");
    }
});

contentType: "application/json"时,你应该传递json对象,将多个属性放在一个对象中

var model = {
            pessoaContatoViewModel: pessoaContatoViewModel,
            formaContatoIdChange: formaContatoIdChange,
            pessoaNatureza: pessoaNatureza 
        }

        $.ajax({
            url: "/pessoa-gerenciar/changeFormaContato",
            type: "POST",
            data: JSON.stringify(model),
            contentType: "application/json",
            dataType: "json",

            success: function (result) {
                formaContatoIdPrevious = "0";
            },
            error: function () {
                formaContatoIdPrevious = "0";
                alert("Oops! Algo deu errado.");
            }
        });
    }

控制器:

    public class TestModel
    {
        public PessoaContatoViewModel pessoaContatoViewModel { get; set; }
        public int formaContatoIdChange { get; set; }
        public PessoaNatureza pessoaNatureza { get; set; }
    }

    [HttpPost]
    [Route("pessoa-gerenciar/changeFormaContato")]
    public IActionResult ChangeFormaContato([FromBody] TestModel model)
    {
        //ViewBag.indice_new = indice;
        //return PartialView("~/Views/Pessoa/PessoaContato/_PessoaContatoAdd.cshtml", _pessoaContatoAppService.CreateNew(pessoaNatureza, formaContatoId));
        return null;
    }