Не удается передать массив объектов контроллеру с помощью jQuery AJAX

#javascript #jquery #asp.net #json #ajax

Вопрос:

Я попытался передать массив объектов контроллеру jQuery Ajax , но результат есть null ASP.NET 5.0 .

Мой массив данных — это то, что нужно отправить 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 resu<
    }
 

Мой результат равен нулю:
введите описание изображения здесь

Я не понимаю, почему это произошло. Вы не могли бы мне помочь?

Комментарии:

1. Вы отправляете объект, следует ли вместо этого отправлять массив?

Ответ №1:

Есть некоторые проблемы, которые я вижу —

  1. Я не уверен, что вы явно написали эту логику, но ваш объект региона всегда будет иметь последнее значение arr, потому что вы объявляете свою переменную внутри цикла.
  2. Если вы пытаетесь создать массив, то вам следует объявить переменную региона как — var region = []; .Прямо сейчас это объект.
  3. Вы пытаетесь передать объект и принимаете список в веб-сервисе. Либо удалите параметр list in в службе AddRegions, либо передайте массив из вызова ajax.

Ответ №2:

Я решил свою проблему, выделив contentType: "application/json;charset=utf-8", строку в коде ajax. Используя эту строку, измените тип массива региона на строку, поэтому, когда я получаю данные в контроллере, возникла проблема.