MVC Как получить массив объектов, который приходит из JSON? - PullRequest
2 голосов
/ 13 февраля 2012

Я пытаюсь отправить массив объектов на мой контроллер, но у меня возникают некоторые трудности.

Он отправляет массив, и при доставке на контроллер количество объектов в массиве также кажется нормальным.Но если вы загляните внутрь объектов, все атрибуты объектов будут null

Как это возможно?

JavaScript:

function callme(results) {
        for (var i = 0; i < results.length; i++) {
            var endRes = {
                Id: results[i].id,
                Icon: results[i].icon
            };
            jsonObj.push(endRes);
        }
        sendPackage(jsonObj);
}

function sendPackage(jsonObj) {
    $.ajax({
        type: "POST",
        url: '../../Home/RegisterList',
        data: { List: jsonObj },
        cache: false,
        dataType: "json",
        error: function (x, e, data) {
                alert(data);
        }
    });
}

Контроллер:

[HttpPost]
public JsonResult RegisterList(ICollection<DetailsModel> List)
{
    foreach (var i in List) ....... // other process will be here
    ............................... // other process will be here
    return Json(new { message = "OK" });
}

Модель:

public class DetailsModel
{
    public string Id { get; set; }
    public string Icon { get; set; }
}

Ответы [ 2 ]

4 голосов
/ 15 февраля 2012

Хорошо, я решил проблему прошлой ночью, используя JSON.NET Ньютона (вы можете получить его из NuGet).Я строчил массив и получил его как строку с контроллером.Наконец, я использовал json.net для преобразования (десериализации) этой строки в коллекцию.

Для строкового преобразования: используйте тот же код, но измените раздел данных запроса json с помощью:

data: { List : JSON.stringify(jsonObj) }

В конце концов получите его:

using Newtonsoft.Json;
public JsonResult RegisterList(string List)
        {
            ICollection<DetailsModel> jsonModel = JsonConvert.DeserializeObject<ICollection<DetailsModel>>(List);
        }

И вуаля;у вас есть коллекция с именем jsonModel!

3 голосов
/ 14 февраля 2012

К сожалению, модель связывания списков не так хороша и очевидна в MVC. Увидеть: http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

Передача списка таким образом работает:

data: {"List [0] .Id": "1", "List [0] .Icon": "test"}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...