В настоящее время я работаю над веб-приложением ASP.net с шаблоном MVC.Я создал страницу, на которой люди могут добавлять элементы в раздел сетки и перетаскивать их (Gridstack - это плагин для создания перетаскиваемых блоков / объектов).Моя цель - отправить окончательные координаты этих блоков на мой контроллер:
function saveData() {
var pagePositions = [];
// Fill our array
$('.grid-stack-item.ui-draggable').each(function () {
var $this = $(this);
pagePositions.push({
x: $this.attr('data-gs-x'),
y: $this.attr('data-gs-y'),
w: $this.attr('data-gs-width'),
h: $this.attr('data-gs-height'),
content: $('.grid-stack-item-content', $this).html()
});
});
// Convert array to object
var pagePosData = toObject(pagePositions);
alert(pagePosData);
$.ajax({
type: "POST",
url: "savePage",
data: { positions: JSON.stringify(pagePosData) }
});
} function toObject(arr) {
var rv = {};
for (var i = 0; i < arr.length; ++i)
if (arr[i] !== undefined) rv[i] = arr[i];
return rv;
}
Приведенный выше код заполняет атрибуты заданных элементов HTML и помещает их в массив.Согласно нескольким темам в Интернете, я предполагал, что отправка массива вызывает проблемы, поэтому я вставил функцию, которая преобразует массив в объект javascript (пары ключ-значение).Я отправляю их своему контроллеру с помощью вызова AJAX, который приводит к коду ошибки 500:
[HttpPost]
public string savePage(string positions)
{
//some code
var json = positions;
var test = "";
CreatePagemodelJson obj = new JavaScriptSerializer().Deserialize<CreatePagemodelJson>(positions.ToString());
//var jsonObject = JsonConvert.DeserializeObject<CreatePagemodel>(positionsJson.ToString());
return "";
}
Я устанавливаю точки останова внутри контроллера, чтобы прочитать значение, которое я получаю из позиций параметров, но это не такдаже добраться до этого момента.Я попытался настроить модели для файла Json, но проблема здесь в том, что почтовые вызовы возвращают динамический формат JSON.
Обновление: Мне удалось заставить его работать с сообщениями ниже.С нижеприведенной структурой я получаю результаты в виде массива в соответствии с моей моделью.
function saveData() {
var pagePositions = [];
// Fill our array
$('.grid-stack-item.ui-draggable').each(function () {
var $this = $(this);
pagePositions.push({
x: $this.attr('data-gs-x'),
y: $this.attr('data-gs-y'),
w: $this.attr('data-gs-width'),
h: $this.attr('data-gs-height'),
content: $('.grid-stack-item-content', $this).html()
});
});
alert(pagePositions);
$.ajax({
type: "POST",
url: "savePage",
contentType: 'application/json',
data: JSON.stringify(pagePositions)
});
}
public class Position
{
public string x { get; set; }
public string y { get; set; }
public string w { get; set; }
public string h { get; set; }
public string content { get; set; }
}
[HttpPost]
public ActionResult savePage(IEnumerable<Position> positions)
{
//some code
return View("SomeView");
}
Параметр position успешно возвращает массив отправленных страницей pagePositions с сообщением: 
Я попытался отправить данные без JSON.stringify (pagePositions) и ContentType: 'application / json', но я получил нулевой возврат в своем параметре на контроллере.