使用不同类型发出 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;
}
我需要使用 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;
}