我正在尝试使用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; }
}
答案 0 :(得分:2)
我认为有2点需要解决:
GET
请求。放入POST
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');
}
});