Передача массива объектов в контроллер с помощью jQuery AJAX, данные действия всегда равны нулю в ASP.NET Core 2.2 MVC - он работает с .NET Framework 4.5 - PullRequest
0 голосов
/ 07 октября 2019

Я работаю в проекте, в котором мне нужно использовать ajax-вызов для сохранения данных объекта со своей страницы, которые содержат детали заказа. Когда я использую проект с .NET Framework версии 4.5, он работает очень хорошо - но когда я использую ASP.NET Core MVC, он не работает. Любая помощь, пожалуйста?

Я пробовал все в подобных вопросах, но они не работали. Например, я использую нотацию [frombody] - но у меня все та же проблема.

У меня есть следующее действие контроллера:

public ActionResult CreateOrders([FromBody] T_POS_ENT_ORDER_DETIALS_Temp []T_POS_ENT_ORDER_Data)
{
    GRepository<T_POS_ENT_ORDER_DETIALS_Temp> t_pos_ent_orderOpr = new GRepository<T T_POS_ENT_ORDER_DETIALS_Temp>();

    T_POS_ENT_ORDER_Data.order_Date = DateTime.Now;
    t_pos_ent_orderOpr.Add(T_POS_ENT_ORDER_Data);

    return Json(new { msg = "Successfully added " }); 
}

И у меня есть следующий вызов ajax:

    var DATA = [];
    DATA.push({ LocPrice: "12" });
    DATA.push({ LocProductID: "1002" });
    DATA.push({ discount: "0" });
    DATA.push({ posNumber: "1" });
    DATA.push({ productName: "soap" });
    DATA.push({ productQynt: "1" });
    $.ajax({

    url: '/AjaxT_POS_ENT_ORDER/CreateOrders',
    data: JSON.stringify({ 'billArray': DATA }),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    type: "POST",
    async: false,

    success: OnSuccess,

  });

У меня также есть этот класс:

public class T_POS_ENT_ORDER_DETIALS_Temp
{
    public string LocPrice { get; set; }
    public string LocProductID { get; set; }
    public string discount { get; set; }
    public string  posNumber { get; set; }
    public string productName { get; set; }
    public int productQynt { get; set; }
}

Нет ошибки, показывая, что только детали заказа всегда нулевые ...

Ответы [ 2 ]

0 голосов
/ 08 октября 2019

Вам нужно изменить JSON.stringify({ 'billArray': DATA }) на JSON.stringify(DATA), как показано ниже:

1.View:

<script>
    $(document).ready(function () {
        var DATA = [];
        DATA.push({ LocPrice: "12" });
        DATA.push({ LocProductID: "1002" });
        DATA.push({ discount: "0" });
        DATA.push({ posNumber: "1" });
        DATA.push({ productName: "soap" });
        DATA.push({ productQynt: "1" });
        $.ajax({
            url: '/AjaxT_POS_ENT_ORDER/CreateOrders',
            data: JSON.stringify(DATA),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            type: "POST",
            async: false
        });
    });
</script>

2.Контроллер:

[HttpPost]
public ActionResult CreateOrders([FromBody] T_POS_ENT_ORDER_DETIALS_Temp[] T_POS_ENT_ORDER_Data)
{
    //your logic...
    return Json(new { msg = "Successfully added " });
}

3.Результат: enter image description here

Кстати, если вы хотите передать их как один объект массива вместо шести массивов, вам нужно изменить свои данные, как показано ниже:

DATA.push({ LocPrice: "12",LocProductID: "1002" ,discount: "0",posNumber: "1" ,productName: "soap",productQynt: "1"});
0 голосов
/ 07 октября 2019

Я не вижу массива в ваших данных, есть только один объект с некоторыми полями. Кроме того, billArray не соответствует T_POS_ENT_ORDER_Data, и привязка модели выполняется путем сопоставления имен.

Чтобы исправить это, необходимо настроить код так, чтобы он только публиковал и получал один объект .:

public ActionResult CreateOrders(T_POS_ENT_ORDER_DETIALS_Temp T_POS_ENT_ORDER_Data)

...

var DATA = {
    LocPrice: "12",
    LocProductID: "1002",
    discount: "0",
    posNumber: "1",
    productName: "soap",
    productQynt: "1"
 });

$.ajax({
    url: '/AjaxT_POS_ENT_ORDER/CreateOrders',
    data: JSON.stringify(DATA),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    type: "POST",
    async: false,
    success: OnSuccess
});

Незначительно, в названии класса есть опечатка "DETIALS" -> "DETAILS".

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