【问题标题】:Can't pass array of objects to controller by jQuery AJAX无法通过 jQuery AJAX 将对象数组传递给控制器
【发布时间】:2021-09-05 09:06:51
【问题描述】:

我试图通过jQuery Ajax 将对象数组传递给控制器​​,但结果是ASP.NET 5.0 中的null

我的数据数组发送到controller: regions。 数据构造函数在BoundingBoxModel 类中定义。 这是我的ajax 函数:

$("body").on("click", "#onClick", function () {
            var regions = [];
            var arr = Array.prototype.slice.call(document.getElementsByClassName('ui-draggable'));
            arr.forEach((tagele) => {
                var region = {};
                region.Height = tagele.offsetHeight;
                region.Width = tagele.offsetWidth;
                region.Top = tagele.offsetTop;
                region.Left = tagele.offsetLeft;
                regions.push(region);
            });
            $.ajax({
                url: '/GenCode/Addregions',
                type: "POST",
                dataType: "json",
                contentType: "application/json;charset=utf-8",
                data: JSON.stringify({'regions': regions}),
                success: function () {
                    alert("pass")
                },
                error: function (jqXhr, json, errorThrown) {
                    alert(errorThrown);
                    console.log(errorThrown);
                }
            });
        });

这是我的 BoundingBoxModel:

 public class BoundingBoxModel
    {
        public int BoundingBoxId { get; set; }
        public double Top { get; set; }
        public double Left { get; set; }
        public double Height { get; set; }
        public double Width { get; set; }
    }

这是我的行动方法。它在GenCodeController 中定义。

[HttpPost]
    public IActionResult AddRegions(List<BoundingBoxModel> regions)
    {
        JsonResult result = new JsonResult(this.Json(JsonConvert.SerializeObject(regions), System.Web.Mvc.JsonRequestBehavior.AllowGet));
         return result;
    }

我的结果为空:

我不明白为什么会这样。你能帮帮我吗?

【问题讨论】:

  • 你正在发送一个对象,你应该发送一个数组吗?

标签: javascript jquery asp.net json ajax


【解决方案1】:

我可以看到一些问题 -

  1. 我不确定您是否明确编写了此逻辑,但您的区域对象将始终具有 arr 的最后一个值,因为您在循环内声明了变量。
  2. 如果您尝试创建一个数组,那么您应该声明您的区域变量,例如 - var region = []; .现在它是一个对象。
  3. 您正在尝试传递对象并接受 Web 服务中的列表。要么删除 AddRegions 服务中的参数列表,要么从 ajax 调用传递一个数组。

【讨论】:

    【解决方案2】:

    我通过检测 ajax 代码中的contentType: "application/json;charset=utf-8", 行解决了我的问题。 使用这条线使 region 的数组类型更改为字符串,因此当我在 Controller 中获取数据时,问题就发生了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-28
      相关资源
      最近更新 更多