Проблемы с выполнением трехпараметрического Ajax-запроса с разными типами - Asp.net Core MVC - PullRequest
0 голосов
/ 01 ноября 2019

Мне нужно сделать Ajax-запрос с 3 параметрами (модель, целое число и перечисление), но я получаю значение NULL для свойств модели, значение 0 для целочисленного параметра и Enum. Любопытно, что если я просто передам Model (personContactViewModel) в одиночку и преобразую его в блок запроса AJAX (data: JSON.stringify (personContactViewModel)), это сработает. Проблема в том, что передаются 3 параметра, ни один из них не работает. Кто-нибудь знает, как мне помочь? Обнимаю всех!

enter image description here

[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.");
    }
});

1 Ответ

0 голосов
/ 01 ноября 2019

Вы должны передать объект json, когда contentType: "application/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;
    }
...