View продолжает возвращать ноль на мой контроллер в MVC 3 - PullRequest
0 голосов
/ 02 апреля 2012

Я пытаюсь отправить данные в контроллер из представления.У меня есть довольно сложный объект, который содержит один массив и один объект со значениями.Что бы я ни пытался, это ноль в моем контроллере.Я проверил данные с IE9s F12 , и данные есть.Я не понимаю, что я делаю не так.

Код зрения:

    var deletedIds = [];

    $("#spara").click(function () {
        var changedInsertedData = $("#dagbok_grid").getChangedCells('all');
        var theData = { changedInserted: changedInsertedData, deleted: deletedIds };
        $.post('@Url.Action("SaveGridData")', JSON.stringify({ data: theData }), null, 'json');
    })

Контроллер:

    public void SaveGridData(DagbokGridDTO data)
    {
        System.Diagnostics.Debug.WriteLine(data.ToString());
    }

Модель / DTOs

public class DagbokGridRadDTO
{
    public string Kronika { get; set; }
    public string Region { get; set; }
    public string id { get; set; }

}

public class DagbokGridDTO
{
    public DagbokGridRadDTO[] changedInserted;
    public string[] deleted;
}

Данные из IE9 F12 mode:

{"data":{"changedInserted":[{"Kronika":"No","Region":"4","id":"2"}],"deleted":["5"]}}

Я думал, что это должно работать таким образом, но в контроллере data.changedInserted и data.deletedнулевой.Я пробовал несколько разных способов, но ничего не помогает.

Ответы [ 2 ]

1 голос
/ 02 апреля 2012

Вместо:

$.post('@Url.Action("SaveGridData")', JSON.stringify({ data: theData }), null, 'json');

использование:

$.ajax({
    url: '@Url.Action("SaveGridData")',
    type: 'POST',
    contentType: 'application/json',
    data: JSON.stringify({ data: theData }),
    success: function(result) {

    }   
});

Обратите внимание, как метод $.ajax позволяет вам установить заголовок Content-Type запроса на application/json, который вы и отправляете. Метод $.post не позволяет установить этот заголовок, и механизм связывания модели не может понять ваш запрос.

0 голосов
/ 02 апреля 2012

Можете ли вы попытаться получить FormCollectiion в контроллере и проверить. Считайте данные как form["changedInserted"] в контроллере.

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