Я ищу решение для POSTing массива объектов MVC3 через JSON.
Пример кода, над которым я работаю: http://weblogs.asp.net/scottgu/archive/2010/07/27/introducing-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<ItemViewModel> 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 содержит один элемент, так как он должен
Элемент в этом элементе 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 Controller? Этот бедный парень должен был написать JsonFilter, чтобы разобрать массив. Еще один хак, который я бы предпочел избежать.
Итак, как мне это сделать?