Как отправить Ajax’ом список объектов (List) в JSON формате
Пример 1
$(document).ready(function () {
$('body').on('click', 'button[name="AddProduct"]', function () {
var product = JSON.stringify({
'Name': $('textarea[name="productName"]').val(),
'Cost': $('input[name="productCost"]').val(),
});
console.log(product);
$.ajax({
url: "/Products/AjaxCreate/",
method: "POST",
contentType: 'application/json',
data: product,
success: function (response) {
console.log(response);
}
});
});
});
Контроллер
public ActionResult AjaxCreate(Product product){
return Json(new { result = "success" }, JsonRequestBehavior.AllowGet);
}
Пример 2
//Сохранение накладной $('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);
}
Ajax запрос в контроллер и получение Json ответа
$(document).ready(function () {
$.ajax({
url: "/Suppliers/AjaxGetSuppliersList/",
method: "GET",
success: function (response) {
data = JSON.stringify(response.suppliers);
var list = eval("(" + data + ")");
suggest_count = list.length;
if (suggest_count > 0) {
$('.supplier-select').empty();//Очистим список элементов
//полученный список элементов добавим в селект
$.each(response.suppliers, function (key, value) {
$('.supplier-select').append('<option value="' + value.Id + '">' + value.Name + '</option>');
});
}
}
});
});
Контроллер
[HttpGet]
public ActionResult AjaxGetSuppliersList()
{
List suppliers = Supplier.GetSuppliers();
return Json(new { suppliers }, JsonRequestBehavior.AllowGet);
}