【问题标题】:How to send a list of objects to controller via Ajax using asp net core 3.1?如何使用asp net core 3.1通过Ajax将对象列表发送到控制器?
【发布时间】:2021-03-12 20:53:54
【问题描述】:

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

调试时我得到一个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# 代码:

public class VentaController : Controller
{
   [HttpPost]
   public JsonResult GuardarVenta(List<Binderr> detalle, Venta venta)
   {
   }
}
public class Binderr
{
    public string ProductoId {get;set;}
}

参数Venta venta 捕获了良好的参数,但列表detalle 没有。我做错了什么?

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

【问题讨论】:

  • 您正在发送一个数组并接受一个列表?
  • 尝试了public JsonResult GuardarVenta(Binderr[] detalle, Venta venta),但没有成功。结果相同。
  • 我删除了我的答案,因为它不正确,但这很可能是找出正确的数据类型以在您的方法中接受的问题。您的 POST 有效负载显示 AJAX 正在发送一个名为 detalle 的 Binderr 对象数组,但您已尝试在您的方法中接收它,但它不起作用。我被难住了!
  • 你认为这是asp net core的问题吗?因为在 asp.net 中这行得通

标签: javascript ajax asp.net-mvc asp.net-core


【解决方案1】:

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

这是一个简单的例子:

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

控制器(Add [FromBody]):

[HttpPost]
public JsonResult GuardarVenta([FromBody]List<Binderr> detalle)
{
}

结果:

【讨论】:

  • 我不知道为什么我的问题看起来很简单,而您在几秒钟内就解决了。我注意到我的错误是没有在 ajax 代码中添加引号。例如 dataType 而不是“dataType”,哇,引号重要吗?我从来没有听说过这样的[FromBody]。谢谢。
  • 引号不是必须的,可以写也可以不写,可以试试。
  • 您的回答对我有帮助,但我仍然遇到一些问题,而且我很挣扎。你能帮助我吗? stackoverflow.com/questions/65088046/…
  • 我还是被卡住了,我不知道如何传递更多数据。
猜你喜欢
  • 2021-03-30
  • 2020-11-19
  • 1970-01-01
  • 2020-12-31
  • 1970-01-01
  • 1970-01-01
  • 2019-08-31
  • 1970-01-01
  • 2023-02-04
相关资源
最近更新 更多