我正在序列化ASP.NET表单,以便将其根据我的PessoaViewModel复杂类进行转换。显然,序列化可以正确进行,但是当我使用Ajax发布时,实际上有98%的字段都加载了空值。在下面,我发布了一部分序列化的类:
ExibirTelaPesquisaCpfCnpjAntesCadastrarPessoa =假&PessoaViewModel.Id = 2 PessoaViewModel.PessoaNatureza&= Juridica&PessoaViewModel.PessoafisicaViewModel.PessoaId = 2&PessoaViewModel.PessoafisicaViewModel.NomeCompleto = JALber%20ROMANO&PessoaViewModel.PessoafisicaViewModel.Apelido = BIM&PessoaViewModel.PessoafisicaViewModel.DataNascimento = 2019年11月18日PessoaViewModel.PessoafisicaViewModel.Sexo = Masculino&PessoaViewModel& .PessoafisicaViewModel.EstadoCivil = Solteiro&PessoaViewModel.PessoafisicaViewModel.PessoafisicaOrigem =巴西陆军&PessoaViewModel.PessoasEnderecosViewModel%5B0%5D.Id = 3&PessoaViewModel.PessoasEnderecosViewModel%5B0%5D.PessoaId = 2&PessoaViewModel.PessoasEnderecosViewModel%5B0%5D.EnderecoTipodescricao = COBRAN%C3%87A&PessoaViewModel.PessoasEnderecosViewModel%5B0 %5D.RotuloEnderecoTipo = Endere%C3%A7o%20de%20cobran%C3%A7a%20%C3%A9%20utilizado%20para%20definir%20o%20local%20de%20cobran%C3%A7a%20de%20mercadorias%20osquiridas %20clientes。&PessoaViewModel.PessoasEnderecosViewModel%5B0%5D。 EnderecoTipoId = 3&PessoaViewModel.PessoasEnderecosViewModel%5B0%5D.PaisId = 1&PessoaViewModel.PessoasEnderecosViewModel%5B0%5D.CodigoPostal = 29780-000&......
JS:
var pessoaViewModel = $('form').serialize();
$.ajax({
url: "/pessoa-gerenciar/change-pessoa-natureza",type: "POST",data: JSON.stringify({ pessoaViewModel: pessoaViewModel}),contentType: "application/json",success: function (data) {
},error: function () {
stopLoadmodalInside();
alert("Oops! Algo deu errado.");
}
});
Asp.Net Core MVC( (控制器,PessoaViewModel类和子类):
public class PessoaViewModel
{
[Key]
public int Id { get; set; }
[DisplayName("Natureza")]
[Required(ErrorMessage = "Escolha uma Natureza")]
public PessoaNatureza PessoaNatureza { get; set; }
[DisplayName("Natureza")]
public string PessoaNaturezaDescricao { get; set; }
[DisplayName("Naturezas")]
public IEnumerable<SelectListItem> Pessoasnaturezas { get; set; }
public PessoafisicaViewModel PessoafisicaViewModel { get; set; }
public PessoaJuridicaViewModel PessoaJuridicaViewModel { get; set; }
public List<PessoaGenericoViewModel> PessoasGenericosViewModel { get; set; }
public List<PessoaContatoViewModel> PessoasContatosViewModel { get; set; }
public List<PessoaDocumentoViewModel> PessoasDocumentosViewModel { get; set; }
public List<PessoaEnderecoViewModel> PessoasEnderecosViewModel { get; set; }
//Configuracoes
//public bool AtivarBloqueioRedundanciaCpfCnpj { get; set; }
public bool ExibirTelaPesquisaCpfCnpjAntesCadastrarPessoa { get; set; }
//DropDownList Novo Contato
public IEnumerable<SelectListItem> FormasContato { get; set; }
//DropDownList Novo Endereco
public IEnumerable<SelectListItem> EnderecosTipos { get; set; }
//DropDownList
public IEnumerable<SelectListItem> DocumentosTipos { get; set; }
// public IEnumerable<SelectListItem> DocumentosOrgaosEmissores { get; set; }
public IEnumerable<SelectListItem> Paises { get; set; }
public PessoaViewModel()
{
Pessoasnaturezas = ExtensaoDeEnumerador.EnumParaSelectListGenerico<PessoaNatureza>("U",PessoaNatureza.ToString()).OrderBy(x => x.Text);
PessoafisicaViewModel = null;
PessoaJuridicaViewModel = null;
}
}
public class PessoaDocumentoViewModel
{
[Key]
public int Id { get; set; }
[DisplayName("Pessoa")]
[Required(ErrorMessage = "Escolha uma Pessoa")]
public int PessoaId { get; set; }
[DisplayName("Tipo de Documento")]
[Required(ErrorMessage = "Escolha um Tipo de Documento")]
public int DocumentoTipoId { get; set; }
public string DocumentoTipodescricao { get; set; }
public string RotuloDocumentoTipo { get; set; }
public string DocumentoTipoSigla { get; set; }
[DisplayName("Documento")]
[Required(ErrorMessage = "O campo Número do Documento é obrigatório")]
[MaxLength(30,ErrorMessage = "O campo {0} deve ter no máximo {1} caracteres")]
public string Documento { get; set; }
public PessoaDocumentoDataEmissaoViewModel PessoaDocumentoDataEmissaoViewModel { get; set; }
public PessoaDocumentoDataPrimeiraEmissaoViewModel PessoaDocumentoDataPrimeiraEmissaoViewModel { get; set; }
public PessoaDocumentoDataVencimentoViewModel PessoaDocumentoDataVencimentoViewModel { get; set; }
public PessoaDocumentoDataExpedicaoViewModel PessoaDocumentoDataExpedicaoViewModel { get; set; }
public PessoaDocumentoOrgaoEmissorViewModel PessoaDocumentoOrgaoEmissorViewModel { get; set; }
public PessoaDocumentoZonaViewModel PessoaDocumentoZonaViewModel { get; set; }
public PessoaDocumentoSecaoViewModel PessoaDocumentoSecaoViewModel { get; set; }
public PessoaDocumentoCategoriaViewModel PessoaDocumentoCategoriaViewModel { get; set; }
public PessoaDocumentoSerieViewModel PessoaDocumentoSerieViewModel { get; set; }
public PessoaDocumentoPaisViewModel PessoaDocumentoPaisViewModel { get; set; }
public PessoaDocumentoUFViewModel PessoaDocumentoUFViewModel { get; set; }
public IEnumerable<SelectListItem> DocumentosTipos { get; set; }
public IEnumerable<SelectListItem> DocumentosOrgaosEmissores { get; set; }
public IEnumerable<SelectListItem> Paises { get; set; }
}
[HttpPost]
[Route("pessoa-gerenciar/change-pessoa-natureza")]
public PartialViewResult ChangePessoaNatureza([FromBody] PessoaViewModel pessoaViewModel)
{
return null;
}
据我研究,序列化仅使用既不为null也不为空的字段。为什么不起作用?字段名称中是否存在无效字符,因为其中许多字符都在列表中? 有人知道如何帮助我吗? 谢谢!