Как отправить 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);
}