Я ищу решение для POST-отправки массива объектов в MVC3 через JSON.
Пример кода, над которым я работаю: http://weblogs.asp.net/scottgu/archive/2010/07/27/introduction-asp-net-mvc-3-preview-1.aspx
JS:
var data = { ItemList: [ {Str: 'hi', Enabled: true} ], X: 1, Y: 2 };
$.ajax({
url: '/list/save',
data: JSON.stringify(data),
success: success,
error: error,
type: 'POST',
contentType: 'application/json, charset=utf-8',
dataType: 'json'
});
ListViewModel.cs:
public class ListViewModel
{
public List ItemList { get; set; }
public float X { get; set; }
public float Y { get; set; }
}
ItemViewModel.cs:
public class ItemViewModel
{
public string Str; // originally posted with: { get; set; }
public bool Enabled; // originally posted with: { get; set; }
}
ListController.cs:
public ActionResult Save(ListViewModel list)
{
// Do something
}
Результатом этого списка POST:
устанавливается значение ListViewModel
Его свойства X и Y установлены
Базовое свойство ItemList установлено
ItemList содержит один элемент, как и должен
Элемент в этом списке предметов не инициализирован. Str имеет значение null, а Enabled - false.
Другими словами, это то, что я получаю от привязки модели MVC3:
list.X == 1
list.Y == 2
list.ItemList != null
list.ItemList.Count == 1
list.ItemList[0] != null
list.ItemList[0].Str == null
Похоже, MVC3 JsonValueProvider не работает для сложных объектов. Как мне заставить это работать? Нужно ли мне изменить существующий MVC3 JsonValueProvider и исправить его? Если да, то как мне найти его и заменить в проекте MVC3?
Связанные вопросы по StackOverflow, которые я уже безрезультатно ответил:
Asp.net Mvc Ajax Json (post Array) Использует MVC2 и более раннее кодирование на основе форм - этот подход не работает с объектом, который содержит массив объектов (JQuery не может его правильно кодировать).
Отправьте массив сложных объектов с помощью JSON, JQuery в ASP.NET MVC Controller Использует хак, которого я бы хотел избежать, когда контроллер вместо этого получает простую строку, которая затем вручную десериализует себя, а не использует структуру.
MVC3 RC2 JSON Post Binding не работает правильно У него не было заданного типа содержимого - он задан в моем коде.
Как отправить массив сложных объектов с помощью JSON, jQuery в контроллер ASP.NET MVC? Этому бедолаге пришлось написать JsonFilter только для анализа массива. Еще один взлом, которого я бы предпочел избежать.
Итак, как мне это сделать?