我在使用Asp.net中的JAX进行复杂模型发布时遇到麻烦。该模型具有代表其他模型的某些属性,但是目前,我只需要使用NULL对其进行初始化。我不知道缺少什么,但是我的控制器正在获取“空”值...在客户端完成的转换中存在一些问题。有人知道如何帮助我吗?
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; }
}
答案 0 :(得分:0)
我认为,如果您删除[From body],并在JavaScript“ Json.Stringify”中删除,它将正常工作。我还删除了内容类型。
var pessoaContatoViewModel = {
Id: 1,
PessoaId: 3,
FormaContatoId: 0,
FormaContatoDescricao: '',
FormasContatos: null,
ContatosTipos: null,
FormaContatoTipoId: 0,
Contato: null,
Observacao: null,
ContatoPrincipal: null,
PessoaContatoChamadaViewModel: null,
PessoaContatoRedeSocialViewModel: null,
PessoaContatoEmailViewModel: null
};
$.ajax({
url: "/Home/changeFormaContato",
type: "POST",
data: pessoaContatoViewModel,
//contentType: "application/json",
dataType: "json",
success: function (result) {
alert('ok');
},
error: function () {
alert("Oops! Algo deu errado.");
console.log(pessoaContatoViewModel);
}
});
答案 1 :(得分:0)
您已将null
付诸行动,因为模型联编程序某些字段的值无效。这意味着,如果属性为int
,则需要传递有效数字;如果属性为bool
,则需要传递true
或false
,而无需传递其他任何内容。如果您需要使用默认值(null
来初始化属性,则可以忽略这些属性
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
};
如果您通过以下模型,那么一切都会很好
var pessoaContatoViewModel = {
FormaContatoId: 7,
FormaContatoDescricao: '',
Contato: "val",
Observacao: "some string",
ContatoPrincipal: true
};
还考虑为请求后的请求创建单独的模型,仅接受您需要的数据(但这不是必需的)
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)