Невозможно опубликовать массив, используя jquery $ .post

0

Кажется, я не могу опубликовать массив, используя функцию jQuery.post. Он выдает код ошибки внутреннего внутреннего сервера 500.

Это фактический пост jQuery:

function ChangeAllStatuses(statusId) {    
var ids = [];
var i = 0;
var hiddenIds = $('[name|="serialIds"]');
hiddenIds.each(function () {
    ids[i++] = $(this).val();
});
$.post(
    ChangeAllStatusesURL,
    {
        serialIds: ids,  //this is the array
        statusId: statusId
    },
    function (data) {
        if (data.indexOf('Error') == 0)
            $('#message').html(data);
        else
            location.reload();
    })

}

и это действие контроллера, которое ожидает данные сообщения:

[HttpPost]
    public ActionResult ChangeAllStatuses(int[] serialIds, int statusId)
    {
        string result = service.ChangeAllStatuses(serialIds, statusId);
        return Content(result);
    }
  • 0
    500 ошибка сервера не означает ничего, кроме «ошибка сервера». Вам нужно будет отладить это на сервере.
  • 0
    @Archer, serialIds достигает сервера ноль, и я не понимаю, почему; переменная ids не равна нулю, когда я устанавливаю параметр post с помощью этой переменной, ids - это массив, содержащий 2 значения типа int.
Показать ещё 4 комментария
Теги:
asp.net-mvc

3 ответа

0

Вероятно, они не форматируют их правильно. Вместо.post() используйте.ajax()

$.ajax({
   url: '~/myUrl/',
       data: {
           serialIds: ids,
           statusId: statusId
       },
       type: "POST"
   });
0

MVC требует определенного способа сериализации данных.

используйте $ajax с traditional флагом.

Это приведет к сериализации данных по-разному. Обратите внимание, что это не очень хорошо справляется со сложными массивами, например (из документации jQuery.param):

// <=1.3.2: ( = traditional)
$.param({ a: [ 2, 3, 4 ] }); // "a=2&a=3&a=4"
// >=1.4:
$.param({ a: [ 2, 3, 4 ] }); // "a[]=2&a[]=3&a[]=4"

// <=1.3.2: ( = traditional)
$.param({ a: { b: 1, c: 2 }, d: [ 3, 4, { e: 5 } ] });
// "a=[object+Object]&d=3&d=4&d=[object+Object]"

// >=1.4:
$.param({ a: { b: 1, c: 2 }, d: [ 3, 4, { e: 5 } ] });
// "a[b]=1&a[c]=2&d[]=3&d[]=4&d[2][e]=5"
0

Я просто инициализировал массив как объект javascript, и он работал нормально:

var ids = {};

Ещё вопросы

Сообщество Overcoder
Наверх
Меню