使用Ajax调用控制器方法

时间:2018-08-14 15:05:37

标签: c# ajax asp.net-mvc

我正在尝试使用ajax调用控制器的方法,但是以某种方式我无法调用该方法。我正在将数组类型对象作为参数发送,但没有在控制器上获取参数的值,即使我以JSON.stringify的形式发送参数,但问题仍然存在。

这是我的ajax方法。

$('.btn-generate-bill').on('click', function(event) {
  event.preventDefault();
  const billArray = [];
  $('.posTable').find('tbody tr').each(function(index, elem) {
    billArray.push({
      ProductID: $(elem).find('.productID').text().trim(),
      Quantity: $(elem).find('.qtyControl').val()
    });
  })
  console.log(JSON.stringify(billArray));
  $.ajax({
    url: "/Cashier/UpdateProductQuantity",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    data: {
      pDetail: JSON.stringify(billArray)
    },
    responseType: "json",
    cache: false,
    traditional: true,
    async: false,
    processData: true,
    success: function(data) {
      alert('success');
    }
  });
})

这是控制器的方法。

public JsonResult UpdateProductQuantity(List<Test> pDetail)
{
    return Json("", JsonRequestBehavior.AllowGet);
}

public class Test
{
    public int ProductID { get; set; }
    public int Quantity { get; set; }
}

2 个答案:

答案 0 :(得分:2)

我认为有2点需要解决:

    没有类型的
  1. ajax将成为GET请求。放入POST
  2. 尝试使用数据:JSON.stringify({ 'pDetail': billArray})

所以,它变成了:

$.ajax({
    url: "/Cashier/UpdateProductQuantity",
    type : 'POST',
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    data: JSON.stringify({ 'pDetail': billArray}),
    responseType: "json",
    success: function (data) {
        alert('success');
    }
});

答案 1 :(得分:1)

我会与您的控制器一起尝试FromBody:

[HttpPost]
public JsonResult UpdateProductQuantity([FromBody]List<Test> pDetail)
{
    return Json("", JsonRequestBehavior.AllowGet);
}

您说您需要发布billArray,因此您的ajax请求应该是这样的发布类型:

$.ajax({
url: "/Cashier/UpdateProductQuantity",
type : 'POST', //this is the difference
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify({ 'pDetail': billArray}),
responseType: "json",
success: function (data) {
    alert('success');
}
});