繁体   English   中英

ASP.NET 核心 MVC Ajax 无法正常工作

[英]ASP.NET Core MVC Ajax not working properly

我的问题非常简单,但我在整个互联网上都没有找到任何关于这个问题的解决方案。 我是 ASP.NET CORE MVC 的新手,与普通的 ASP.NET 相比,我觉得它的 AJAX 很难理解。

好吧,我正在尝试将对象数组/列表传递给 controller 但我做不到。 它非常简单,但不能按我想要的方式工作(在正常的 ASP.NET MVC 中效果很好)。

例如我有这个:

var detalleVenta = new Array();

     $.each($("#tableventa tbody tr"), function () {

                 detalleVenta.push( 
                     {
                         "ProductoId" :  $(this).find("td").eq(6).html(),
                         "Cantidad" :  $(this).find("td").eq(2).html(),
                         "Precio" :  $(this).find("td").eq(3).html(),
                         "Total" :  $(this).find("td").eq(4).html() 
                     }
                     ); 
            });

        $.ajax({
          method:"POST",
          data: JSON.stringify(detalleVenta),
          "dataType": "json",
          "contentType": "application/json",
           url: '@Url.Action("GuardarVenta", "Venta")',
           traditional: true,         
           success: function(data, textStatus) { 
           if (data == "OK" ){
           location.href = '@Url.Action("Index","Compra")'          
        }
    }
        ,
        })

MVC controller:

public JsonResult GuardarVenta([FromBody]List<DetalleBinding> detalle)
{
      ...
}

public class DetalleBinding
{
    public string ProductoId {get; set;}
    public string Cantidad {get;set;}
    public string Precio {get;set;}
    public string Total {get;set;}
}

这种方式对我有用,ajax 成功将列表数据发送到 controller:

在此处输入图像描述

但我的问题是......如果我想从该数据中发送更多数据怎么办? 我通常以 JSON 格式写它,如下所示: data: { "detalle": detalleVenta, "Name": "Mary", "Age": 34}但我的问题是这对我不起作用。

我试过这个:

 $.ajax({
    method:"POST",
    data: {"detalle" : JSON.stringify(detalleVenta)},
    "dataType": "json",
    "contentType": "application/json",
    url: '@Url.Action("GuardarVenta", "Venta")',
    traditional: true,         
    success: function(data, textStatus) { 
    if (data == "OK" ){
        location.href = '@Url.Action("Index","Compra")'          
        }
    }
        ,
        })

但它不绑定到 controller 并给我 null。

在此处输入图像描述

我做错了什么?

这就是console.log(JSON.stringify(detalleVenta))显示的内容:

在此处输入图像描述

Doc中,您可以看到:

Don't apply [FromBody] to more than one parameter per action method. Once the request stream is read by an input formatter, it's no longer available to be read again for binding other [FromBody] parameters.

因此,如果您想发送更多数据,最简单的方法是通过查询字符串,如下所示(更改 url):

$.ajax({
      method:"POST",
      data: JSON.stringify(detalleVenta),
      dataType: "json",
      contentType: "application/json",
      url: "Venta/GuardarVenta?age=34&name=Marry",
      traditional: true,         
      success: function(data, textStatus) { 
      if (data == "OK" ){
      location.href = '@Url.Action("Index","Compra")'          
    }

行动:

public JsonResult GuardarVenta([FromBody]List<DetalleBinding> detalle,int age,string name)
{
  ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM