Javascript 如何使用asp net core 3.1通过Ajax向controller发送对象列表?

Javascript 如何使用asp net core 3.1通过Ajax向controller发送对象列表?,javascript,ajax,asp.net-mvc,asp.net-core,Javascript,Ajax,Asp.net Mvc,Asp.net Core,我正在尝试使用ajax和asp.NETCore向controller发送对象列表。我的问题非常简单,关于我的问题有很多答案,但是没有一个解决了我的问题。我是ASP.NET核心的新手,但对ASP.NET(普通的)非常有经验 当去bug时,我会得到一个null对象列表 这是我的代码: var detalleVenta = new Array(); detalleVenta.length = 0; $.each($("#tableventa tbody tr"

我正在尝试使用ajax和asp.NETCore向controller发送对象列表。我的问题非常简单,关于我的问题有很多答案,但是没有一个解决了我的问题。我是ASP.NET核心的新手,但对ASP.NET(普通的)非常有经验

当去bug时,我会得到一个
null
对象列表

这是我的代码:

var detalleVenta = new Array();
    detalleVenta.length = 0;


     $.each($("#tableventa tbody tr"), function () {
                detalleVenta.push({
                    ProductoId: $(this).find('td:eq(6)').html(),
                });
            });

console.log(detalleVenta);

  var datos =
{  
    // ignore this, i am trying to capture other data.
    "Nit": document.getElementById('Nit').value,
    "Nombres":document.getElementById('nombres').value,
    "NoComprobante":document.getElementById('nocomprobante').value,
    "ClienteId":document.getElementById('clienteselect').value,
    "Direccion":document.getElementById('direccion').value,
    "FormaPago":document.getElementById('selectformapago').value,
    

    // This is the list I want to send to controller
    "detalle": detalleVenta,
};

  $.ajax(
    {     
        url: '/Venta/GuardarVenta/',        
        method:"POST",
        data: datos,
        traditional: true,      
        success: function(data, state) { 
            location.reload();
            return;
        }, 
        error: function(xhr, textStatus, txt) {
            alert(xhr.responseText);
            return;
        }

    });
console.log(detalleVenta)中代码我得到这个:

但当点击参数控制器时,我得到:

这是我的C#代码:

公共类VentaController:控制器
{
[HttpPost]
公共JsonResult GuardarVenta(列出detalle,Venta-Venta)
{
}
}
公共类Binderr
{
公共字符串ProductoId{get;set;}
}
参数
Venta-Venta
捕获了良好的参数,但列表
detalle
没有。我做错了什么


编辑:已尝试
public JsonResult GuardarVenta(Binderr[]detalle,Venta-Venta
获得相同的结果,列表在控制器中为空


通常最简单的方法是以
Json
的形式将数组传递到后端

下面是一个简单的例子:

 var detalleVenta =
            [
            { id: "1" },
            { id: "2" },
            { id: "3" }
            ]
       
        $.ajax({
            "type": "POST",
            "url": '/Venta/GuardarVenta/',
            "dataType": "json",
            "contentType": "application/json",
            "data": JSON.stringify(detalleVenta),
            })
控制器(
添加[FromBody]
):

[HttpPost]
公共JsonResult GuardarVenta([FromBody]列表详细信息)
{
}
结果:

您正在发送一个数组并接受一个列表?已尝试
公共JsonResult GuardarVenta(Binderr[]detalle,Venta-Venta)
但不起作用。结果相同。我删除了我的答案,因为它不正确,但这很可能是一个问题,即找出在您的方法中要接受的正确数据类型。您的POST有效负载显示AJAX正在发送一个名为detalle的Binderr对象数组,但您尝试在您的方法中接收该对象,但它不起作用。我被难住了!是吗你认为这是asp.net的核心问题吗?因为在asp.net中这项工作我不知道为什么我的问题看起来如此简单,而你在几秒钟内就解决了。我注意到我的错误是没有在ajax代码中添加引号。例如,数据类型而不是“数据类型”,引号重要吗?我从来没有听说过这样的
[FromBody]
。谢谢。引号不是必需的,你可以写也可以不写,你可以试试。你的回答帮助了我,但我仍然有一些问题,我正在努力。你能帮我吗?我仍然被困在那里,我不知道如何从上面提到的内容传递更多的数据。
 var detalleVenta =
            [
            { id: "1" },
            { id: "2" },
            { id: "3" }
            ]
       
        $.ajax({
            "type": "POST",
            "url": '/Venta/GuardarVenta/',
            "dataType": "json",
            "contentType": "application/json",
            "data": JSON.stringify(detalleVenta),
            })
[HttpPost]
public JsonResult GuardarVenta([FromBody]List<Binderr> detalle)
{
}