C# 使用Ajax调用控制器方法

C# 使用Ajax调用控制器方法,c#,ajax,asp.net-mvc,C#,Ajax,Asp.net Mvc,我试图使用ajax调用控制器的方法,但不知何故,我无法调用该方法。我将数组类型的对象作为参数发送到post,但没有获取控制器上的参数值,即使我将参数作为JSON.stringify发送,但问题仍然存在 这是我的ajax方法。 $('.btn生成账单')。在('click',函数(事件){ event.preventDefault(); 常量billArray=[]; $('.posTable').find('tbody tr').each(函数(索引,元素){ 推({ ProductID:$(e

我试图使用ajax调用控制器的方法,但不知何故,我无法调用该方法。我将数组类型的对象作为参数发送到post,但没有获取控制器上的参数值,即使我将参数作为
JSON.stringify
发送,但问题仍然存在

这是我的ajax方法。

$('.btn生成账单')。在('click',函数(事件){
event.preventDefault();
常量billArray=[];
$('.posTable').find('tbody tr').each(函数(索引,元素){
推({
ProductID:$(elem).find('.ProductID').text().trim(),
数量:$(elem).find('.qtyControl').val()
});
})
log(JSON.stringify(billArray));
$.ajax({
url:“/Cashier/UpdateProductQuantity”,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
数据:{
pDetail:JSON.stringify(billArray)
},
响应类型:“json”,
cache:false,
传统的:是的,
async:false,
processData:对,
成功:功能(数据){
警惕(“成功”);
}
});
})
这是控制器的方法

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

public class Test
{
    public int ProductID { get; set; }
    public int Quantity { get; set; }
}
public JsonResult UpdateProductQuantity(列表pDetail)
{
返回Json(“,JsonRequestBehavior.AllowGet);
}
公开课考试
{
public int ProductID{get;set;}
公共整数数量{get;set;}
}

我认为有两点需要修正:

  • 没有该类型的ajax将成为
    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');
        }
    });
    

    我会尝试使用您的控制器进行FromBody:

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

    为什么要使用GET请求进行修改?这应该是一个补丁。这有什么关系吗?
    async:false
    已经被弃用了很长一段时间;是时候停止使用了。好的,下次会小心的time@AntoOne非常感谢您宝贵的时间,问题已经解决。端点只接受一个直通,因此需要编辑
    $.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');
    }
    });