Как отправить Ajax’ом список объектов (List) в JSON формате, в контроллер для дальнейшей работы с ним.
Незаполненные поля получат значение null.
Скрипт в представлении
//Сохранение накладной $('body').on('click', 'button[name="SaveInvoiceBill"]', function () { //Соберем таблицу как массив объектов var billDetails = []; $('.item').each(function () { var name = $(this).find('.name').val(); //Название var quantity = parseInt($(this).find('.quantity').val()); //Количество var price = parseFloat($(this).find('.price').val());//Цена var summ = parseFloat($(this).find('.item-summ').attr('value'));//Сумма var productId = parseFloat($(this).find('.item-id').attr('value'));//Id Товара var productSkuId = parseInt($(this).find('.item-sku-id').attr('value'));//Id Торгового предложения Товара var notRec = $(this).find('.item-not-rec').prop('checked');//Учитывать товар или нет billDetails.push({ Name: name, Quantity: quantity, Price: price, Summ: summ, ProductId: productId, ProductSkuId: productSkuId, NotRec: notRec }); }); console.log(billDetails); billDetails = JSON.stringify({ 'billDetails': billDetails }); //Превратим в Стетхема //Отправим на сохранение $.ajax({ url: "/Bills/AjaxSaveInvoiceBill/", method: "POST", contentType: 'application/json', data: billDetails, success: function (response) { window.location.replace("/Bills/List/"); } }); return false; });
Контроллер
[HttpPost] public ActionResult AjaxSaveInvoiceBill(List<BillDetail> billDetails) { if (billDetails.Count == 0) return Json(new { result = "error", message = "В накладной нет товаров" }, JsonRequestBehavior.AllowGet); //Создадим новую приходную накладную, получим ее ID long billId = Bill.CreateBill(BillTypes.Invoice); //Теперь сохраним каждую позицию под ID новой накладной BillDetail.SaveBillDetails(billDetails, billId); return Json(new { result="success", message="Накладная успешно создана" }, JsonRequestBehavior.AllowGet); }