Как отправить список массивов в Jquery с помощью XMLHttpRequest

#c# #jquery #list #xmlhttprequest #webapi

#c# #jquery #Список #xmlhttprequest #webapi

Вопрос:

Я использую XMLHttpRequest для отправки информации, и отправляемая мной информация включает класс, в котором одним из свойств является список. Проблема в том, что он отправляет всю информацию, но не отправляет нужный список.

Класс C#

 public class AddProductRequest
{
     public decimal GroupId { get; set; }
     public decimal BrandId { get; set; }
     public List<AdvancedDescription> AdvancedDescriptions { get; set; }
}

public class AdvancedDescription 
{
  public string Title { get; set; }
  public string Description { get; set; }
}
 

Метод WebAPI

 [Route("AdminApiAddProduct")]
[HttpPost]
public ResponseBody AdminApiAddProduct(AddProductRequest request)
{
      if ((request.AdvancedDescriptions ?? new List<AdvancedDescription>()).Count > 0)
      {
//Problem Array Count is 0
      }
      var groupId = request.GroupId; //is 12
      var brandId = request.BrandId; //is 13
}
 

Jquery

 $('body').on('click','#bSubmit',function(event) {
    event.preventDefault();

    var attributes = 
        [
           {Title : 'test' , Description: 'test'} ,
           {Title: 'test2' , Description : 'test2'}
        ];

   const formData = new FormData();
   formData.append('request.GroupId', 12);
   formData.append('request.BrandId', 13);
   formData.append('request.AdvancedDescriptions' , attributes);

   var xmlHttpRequest = new XMLHttpRequest();
   if (!window.XMLHttpRequest) {
        xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
   }

   xmlHttpRequest.open("POST",
                '@Url.Action("AdminApiAddProduct", "CallApi", new {area = "AdminArea"})',
                true);

   xmlHttpRequest.onloadend = function() {
        var response = JSON.parse(xmlHttpRequest.responseText);
   }
   xmlHttpRequest.send(formData);
});
 

Общая проблема заключается в том, что расширенный список описаний не отправляется на сервер

Ответ №1:

Поскольку вы используете jQuery, вы можете использовать $.ajax , создать объект JS и сериализовать его перед отправкой:

 $('body').on('click','#bSubmit',function(event) {
  event.preventDefault();
  var attributes = [
    {Title: 'test', Description: 'test'} ,
    {Title: 'test2', Description : 'test2'}
  ];
  
  const data = {
    GroupId: 12,
    BrandId: 13,
    AdvancedDescriptions: attributes
  };
  $.ajax({
    url: '@Url.Action("AdminApiAddProduct", "CallApi", new {area = "AdminArea"})',
    type: 'POST',
    data: JSON.stringify(data),
    datatype: 'json',
  })
    .done(function (data) {
      successFunction(data);
    })
    .fail(function (jqXHR, textStatus, errorThrown) {
      serrorFunction();
    });
});
 

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

1. Я обновил анализатор, дайте мне знать, если он не работает.

2. не сработало, и он по-прежнему не отправляет список.

3. Хорошо, попробуйте использовать объект JavaScript, а не FormData, и сериализуйте весь объект перед отправкой. Опустите «запрос». литерал в ключах. Просто используйте обычный объект JS и сериализуйте его.

4. Вы можете привести пример с теми же данными