Проблемы публикации в модели с AJAX в ASP.NET CORE MVC - PullRequest
0 голосов
/ 15 марта 2019

У меня проблемы с созданием сообщения из сложной модели с использованием JAX в Asp.net. У модели есть некоторые свойства, которые представляют другие модели, но на данный момент мне нужно только инициализировать их с помощью NULL. Я не знаю, чего не хватает, но мой контроллер получает «нулевое» значение ... Существует некоторая проблема в преобразовании, выполняемом на стороне клиента. Кто-нибудь знает, как мне помочь?

enter image description here

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; }
}

Ответы [ 2 ]

0 голосов
/ 15 марта 2019

Вы передали 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
};

Также condsiderсоздание отдельной модели для пост-запроса, принимающей только те данные, которые вам нужны (но это не обязательно)

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)
0 голосов
/ 15 марта 2019

enter image description here

Я думаю, что если вы удалите [Из тела] и в 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);
                }
            });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...