ASP. NET Core - массив AJAX выглядит так, как будто он не заполнен и не передан в контроллер - PullRequest
0 голосов
/ 02 мая 2020

У меня проблема с передачей массива с использованием AJAX в контроллер.

Ниже приведен SQL снимок экрана со структурой таблицы:

Вот SQL структура таблицы

Вот ВИД

$("body").on("click", "#btnSave", function () {

            var items = new Array();
            $("#tblItems TBODY TR").each(function () {
                var row = $(this);
                var item = {};
                item.ItemID = row.find("TD").eq(0).html();
                item.ProInvoiceNum = row.find("TD").eq(1).html();
                item.InvoiceNum = row.find("TD").eq(2).html();
                item.ProductNum = row.find("TD").eq(3).html();
                item.ItemDiscount = row.find("TD").eq(4).html();
                item.ItemAmount = row.find("TD").eq(5).html();
                items.push(item);
            });

            $.ajax({
                type: "POST",
                url: "/Items/AddItems",
                data: JSON.stringify(items),
                traditional: true,
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (r) {
                    alert(r + " record(s) inserted.");
                }
            });
        });

Когда я хочу сохранить результат массива JSON, контроллер возвращает добавление 0 записей в БД.

Есть ли вероятность, что, например, "ItemId" должен быть проанализирован, потому что он имеет тип int и является строкой в ​​массиве, верно?

Вот это сообщение Action в CONTROLLER

        [HttpPost]
        public IActionResult AddItems([FromBody]IEnumerable<Items> items)
        {
                //Loop and insert records.
                foreach (Items item in items)
                {
                    _context.Items.Add(item);
                }

                int insertedRecords = _context.SaveChanges();
                return Json(insertedRecords);     
        }

Я действительно ценю любую помощь в этом, я пытался исправить это многими способами, но теперь мой мозг заблокирован возможными идеями, чтобы исправить это.

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

1 Ответ

0 голосов
/ 02 мая 2020

Я думаю, что проблема в том, что некоторые из ваших свойств не являются строковыми типами, и поэтому они не устанавливаются правильно при привязке модели.

Я бы назвал элемент класса, а не элементы, потому что это соглашение используется с Entity Framework. Глядя на структуру таблицы, ваш класс элементов должен быть определен примерно так:

public class Item
{
    public int ItemID { get; set; }
    public string ProInvoiceNum { get; set; }
    public string InvoiceNum { get; set; }
    public string ProductNum { get; set; }
    public byte ItemDiscount { get; set; }
    public int ItemAmount { get; set; }
}

Проблема, с которой вы столкнулись, заключается в том, что связыватель модели отправляется JSON, в котором есть строки и модель с некоторыми целыми числами. Я думаю, что самое простое решение - использовать метод parsInt на клиенте. Другими словами, измените заполнение строк вашего элемента на

item.ItemID = parseInt(row.find("TD").eq(0).html());
item.ProInvoiceNum = row.find("TD").eq(1).html();
item.InvoiceNum = row.find("TD").eq(2).html();
item.ProductNum = row.find("TD").eq(3).html();
item.ItemDiscount = parseInt(row.find("TD").eq(4).html());
item.ItemAmount = parseInt(row.find("TD").eq(5).html());

. Тогда ваш JSON будет содержать числа, которые ему нужны, а не строки.

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