在ASP.NET CORE MVC中使用AJAX在模型中发布问题 [英] Problems Posting in a Model with AJAX in ASP.NET CORE MVC

查看:234
本文介绍了在ASP.NET CORE MVC中使用AJAX在模型中发布问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在使用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,则需要传递truefalse,而别无其他.如果您需要使用默认值(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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆