Опубликованные модели (через jQuery) возвращаются со всеми свойствами, установленными по умолчанию - PullRequest
0 голосов
/ 25 июля 2010

Я получаю большинство своих данных в виде моделей из моего приложения MVC и просто оперирую ими на стороне клиента. Когда я закончу с тем, что делает пользователь, я просто отправляю модель / массив моделей на сервер.

В конкретном сценарии я отправляю массив с двумя моделями обратно в приложение. Я могу видеть все значения модели в HTTP ... но когда они десериализованы и переданы моему контроллеру, они выходят "пустыми", то есть все свойства устанавливаются в значения по умолчанию, но коллекция состоит из двух элементов.

Есть идеи, что может быть причиной этого? Похоже, что MVC не может десериализовать HTTP для строго типизированных объектов, но я не могу понять, почему в HTTP все «хорошо» выглядит. Есть ли какой-то процесс, который я мог бы пропустить?

Если это важно, я пытался «получить» данные в качестве формальных параметров типа IList и MyModel [] ... похоже, не помогает.

Мне сложно придумать конкретный код, но здесь - возможно, это поможет

// Client side

var models = new Array();
for(var i in selectedModels) {
    var item = selectedModels[i];

    if(typeof(item) != 'function') {
        models.push(item);
    }
}

$.ajax({
    type: "POST",
    data: { myModels: models, name: "" },
    dataType: "json",
    url: "/json/my-controller/create-models",
    success: function (data, successCode, httpRequest) {
        // Do some stuff
    }
})

// Server Side

[HttpPost, ActionName("create-models")]
public ActionResult DoSomething(MyModel[] myModels)
{
    if(myModels == null || myModels.Length < 1)
    {
        throw new InvalidOperationException("You must provide at least one model to add to the collection.");
    }

    // Do someother stuff...
    return Json(someNewModel);
}

1 Ответ

2 голосов
/ 25 июля 2010

Смотрите этот блог пост. Вам необходимо использовать библиотеку json2.js , чтобы привести данные в соответствие перед публикацией. Метод stringify позволяет сериализовать структуры данных JavaScript для передачи по http. Затем вам необходим Json Model Binder, чтобы помочь восстановить объектную сторону сервера.

Ваш код js будет выглядеть так:

var models = new Array();
for(var i in selectedModels) {
    var item = selectedModels[i];

    if(typeof(item) != 'function') {
        models.push(item);
    }
}

var postdata = JSON.stringify(models);

$.ajax({
    type: "POST",
    data: postdata ,
    dataType: "json",
    url: "/json/my-controller/create-models",
    success: function (data, successCode, httpRequest) {
        // Do some stuff
    }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...