AJAX Post of JavaScript String Array для JsonResult в виде списка <string>Всегда возвращает значение NULL? - PullRequest
35 голосов
/ 25 марта 2010

Я пытаюсь создать массив строк в JavaScript и получить результаты в списке строк в методе действия. Вот как выглядит мой JavaScript. Я использую jQuery 1.4.2. Проблема в том, что мой список в методе действия всегда показывает NULL. Будет ли массив строк JavaScript не отображаться правильно в список строк в C #?

    var test = ['test1', 'test2'];

    var parms = {
        var1: 'some string',            
        var2: test
    };

    $.ajax({
        type: "POST",
        url: "/Test/JSONTestAction",
        async: false,
        data: parms,
        dataType: "json",
        success: function(data) {

            // success
        }
    });

Тогда мой JsonResult выглядит следующим образом:

    public JsonResult JSONTestAction(string var1, List<string> var2)
    {
        // var2 is always NULL -- not good

        return Json(new { test = "test" });
    }

Ответы [ 2 ]

54 голосов
/ 25 марта 2010

Я столкнулся с той же проблемой после обновления до jquery 1.4.2. Вы можете найти решение здесь (в разделе Ajax).

Добавление традиционных: true в настройках ajax должно работать.

$.ajax({
    type: "POST",
    traditional: true,
    url: "/Test/JSONTestAction",
    async: false,
    data: parms,
    dataType: "json",
    success: function(data) {

        // success
    }
});
7 голосов
/ 25 марта 2010

Это изменение было сделано для улучшения нативного поведения пользователей PHP / Rails, подробнее об изменениях параметров можно прочитать здесь .

Вы можете включить его для каждого запроса следующим образом:

$.ajax({ 
 //Stuff...
 traditional:true 
});

Или глобально, как это (нужно запускать только один раз, прежде чем запускать какие-либо запросы):

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