Вложенный объект не сопоставляется с моделью на стороне сервера - PullRequest
1 голос
/ 07 июля 2019

Я пытаюсь отправить вложенный объект на мой контроллер MVC через AJAX. Мой набор данных вроде ниже.

   function GetValuesForSave() {

        var model = {
            Partycode: "x",
            DocDate: new Date(),
            DocNo: 1,
            SaleItems: {
                StockCode:'',
                Amount: 1,
                DiscPerc: 1,
                DiscAmount: 1,
                Qty: 1,
                Rate: 1,
                Description: '',
                Unit: ''
            }

        }

        return model;
    }

Мой звонок по Ajax:

var datatosend=GetValuesForSave();
    $.ajax({
      url: "/Sales/SaveSales/",

      data: datatosend,
      success: function() {
        alert("success");
      },
      error: function() {
        alert("failure");
      }
    });

Структура моей модели:

public class SalesViewModel
{
    public string Partycode { get; set; }
    public DateTime DocDate { get; set; }
    public int DocNo { get; set; }
    private SaleItem _saleItem;
    public SaleItem SaleItems { get; set; }
}

public class SaleItem
{
    public string StockCode { get; set; }
    public string Description { get; set; }
    public string Unit { get; set; }
    public double Qty { get; set; }
    public double Rate { get; set; }
    public double DiscPerc { get; set; }
    public double DiscAmount { get; set; }
    public double Amount { get; set; }
}

Мой метод управления:

public ActionResult SaveSales(SalesViewModel m)
{
    var data = sale;
    return View();
}

Проблема, с которой я столкнулся, в состоянии получить основные детали модели от контроллера, но поля вложенных объектов равны нулю, если я что-то упустил. Нужно ли что-нибудь сделать с GET SET вложенного свойства. Я пытался отправить данные в виде строки JSON, но получаю тот же результат. enter image description here

Пожалуйста, найдите журнал консоли Chrome

enter image description here

Ответы [ 2 ]

2 голосов
/ 07 июля 2019

В данный момент вы выполняете запрос GET.Из-за этого метод jQuery ajax пытается интерпретировать data как строку запроса, поэтому вы получаете только пары "ключ-значение" верхнего уровня в методе контроллера.

Чтобы он работал, вам нужно изменить ваш ajax вызов на это:

$.ajax({
  type: "POST", // perform POST request
  url: "/Sales/SaveSales/",
  data: JSON.stringify(datatosend), // serialize your data into JSON
  contentType: "application/json", // tell server to interpret data as JSOn
  success: function() {
    alert("success");
  },
  error: function() {
    alert("failure");
  }
});

В вашем контроллере вы также должны указать, что m должно бытьберется из тела запроса POST, помечая конечную точку как HttpPost и аннотируя ваш параметр тегом FromBody:

[HttpPost]
public ActionResult SaveSales([FromBody] SalesViewModel m)
{
    // ...
}
1 голос
/ 07 июля 2019

Укажите свой глагол действия на HttpPost

[HttpPost]
public ActionResult SaveSales(SalesViewModel m)
{
     ...
}

и ваш вызов API:

$.ajax({
    url: "/Home/SaveSales/",
    type: "POST",
    ...
}

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...