Javascript 如何使用asp net core 3.1通过Ajax向controller发送对象列表?
我正在尝试使用ajax和asp.NETCore向controller发送对象列表。我的问题非常简单,关于我的问题有很多答案,但是没有一个解决了我的问题。我是ASP.NET核心的新手,但对ASP.NET(普通的)非常有经验 当去bug时,我会得到一个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"
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)
{
}