在ASP.NET CORE MVC中使用AJAX在模型中发布问题 [英] Problems Posting in a Model with AJAX in ASP.NET CORE MVC
问题描述
我在使用Asp.net的JAX进行复杂模型的发布时遇到麻烦.该模型具有代表其他模型的某些属性,但是目前,我只需要使用NULL对其进行初始化.我不知道缺少什么,但是我的控制器正在获取空"值...在客户端完成的转换中存在一些问题.有人知道如何帮助我吗?
I'm having trouble doing a Post from a Complex Model using JAX in Asp.net. The model has some properties that represent other models, but at the moment, I only need to initialize them with NULL. I do not know what is missing, but my controller is getting "null" value ... There is some problem in the conversion done on the Client side. Does anyone know how to help me?
var pessoaContatoViewModel = {
Id: 0,
PessoaId: 0,
FormaContatoId: formaContatoId,
FormaContatoDescricao: '',
FormasContatos: null,
ContatosTipos: null,
FormaContatoTipoId: 0,
Contato: contato,
Observacao: observacao,
ContatoPrincipal: contatoPrincipal,
PessoaContatoChamadaViewModel: null,
PessoaContatoRedeSocialViewModel: null,
PessoaContatoEmailViewModel: null
};
$.ajax({
url: "/pessoa-gerenciar/changeFormaContato",
type: "POST",
data: JSON.stringify(pessoaContatoViewModel),
contentType: "application/json",
dataType: "json",
success: function (result) {
alert('ok');
},
error: function () {
alert("Oops! Algo deu errado.");
console.log(pessoaContatoViewModel);
}
});
[HttpPost]
[Route("pessoa-gerenciar/changeFormaContato")]
public IActionResult ChangeFormaContato([FromBody] PessoaContatoViewModel pessoaContatoViewModel)
{
//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; }
public string FormaContatoDescricao { get; set; }
public IEnumerable<SelectListItem> FormasContatos { get; set; }
public IEnumerable<SelectListItem> ContatosTipos { 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; }
public FormaContatoTipoViewModel FormaContatoTipoViewModel { get; set; }
public PessoaContatoChamadaViewModel PessoaContatoChamadaViewModel { get; set; }
public PessoaContatoRedeSocialViewModel PessoaContatoRedeSocialViewModel { get; set; }
public PessoaContatoEmailViewModel PessoaContatoEmailViewModel { get; set; }
}
推荐答案
您已将null
传递给操作,因为模型联编程序某些字段的值无效.这意味着,如果属性为int
,则需要传递有效数字;如果属性为bool
,则需要传递true
或false
,而别无其他.如果您需要使用默认值(null
)初始化属性,则可以忽略这些属性
You have null
passed to action because model binder got invalid values for some fields. It means that if the property is int
you need to pass valid number, if it is bool
you need to pass true
or false
and nothing else. If you need to initialize property with default value (null
) you can just omit these properties
var pessoaContatoViewModel = {
//Id: 0, omit default value
//PessoaId: 0,
FormaContatoId: formaContatoId, //make sure this is valid integer
FormaContatoDescricao: '',
//FormasContatos: null, omit default value
//ContatosTipos: null, omit default value
//FormaContatoTipoId: 0, omit default value
Contato: contato,
Observacao: observacao,
ContatoPrincipal: contatoPrincipal, //make sure this boolean or string "true" or "false"
//PessoaContatoChamadaViewModel: null, omit default value
//PessoaContatoRedeSocialViewModel: null, omit default value
//PessoaContatoEmailViewModel: null omit default value
};
如果您通过以下模型,那么一切都会很好
If you pass the following model everything will work fine
var pessoaContatoViewModel = {
FormaContatoId: 7,
FormaContatoDescricao: '',
Contato: "val",
Observacao: "some string",
ContatoPrincipal: true
};
还考虑为发布请求创建单独的模型,仅接受您需要的数据(但这不是必需的)
Also condsider creating separate model for post request accepting only data you need (but this is not required)
public class PessoaContatoModel
{
public int FormaContatoId { get; set; }
public string FormaContatoDescricao { get; set; }
public string Contato { get; set; }
public string Observacao { get; set; }
public bool ContatoPrincipal { get; set; }
}
[HttpPost]
[Route("pessoa-gerenciar/changeFormaContato")]
public IActionResult ChangeFormaContato([FromBody] PessoaContatoModel pessoaContatoViewModel)
这篇关于在ASP.NET CORE MVC中使用AJAX在模型中发布问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!