Кажется, я не могу опубликовать массив, используя функцию 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);
}
Вероятно, они не форматируют их правильно. Вместо.post() используйте.ajax()
$.ajax({
url: '~/myUrl/',
data: {
serialIds: ids,
statusId: statusId
},
type: "POST"
});
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"
Я просто инициализировал массив как объект javascript, и он работал нормально:
var ids = {};