Недопустимый примитив JSON: 103,104,105. - jqgrid - при передаче массива в действие контроллера

Я использую функцию множественного выбора, чтобы выбрать несколько строк и передать их контроллеру. Ниже приведен javascript:

onClickButton: function (ids) {

var grid = $("#employee");
var rowid = grid.jqGrid('getGridParam', 'selarrrow');

var count = rowid.length;
var rowData;
var colData = [];

for (var i = 0; i < count; i++) {
   rowData = $("#employee").getRowData(rowid[i]);
   colData[i] = rowData.ID;
                            }

$.ajax({
    type: 'POST',
    url: '/Home/Create/' + colData,
   //data: { id: colData },
    dataType: "json"
    });
}

Действие моего контроллера приведено ниже:

public ActionResult Create(string id){
JavaScriptSerializer ser = new JavaScriptSerializer();
var myList = ser.Deserialize<List<string>>(id);}

Я создаю colData как массив и в настоящее время добавляю к нему четыре идентификатора («102,103,104,105»). Когда я отлаживаю и смотрю на colData, он содержит «102,103,104,105». Затем я передаю его действию контроллера в виде строки, а затем десериализую ее. Когда я десериализую его, он сообщает: «Недопустимый примитив JSON: 103,104,105».

Я видел другие сообщения, но не могу найти ничего, связанного с моей проблемой. Когда я передаю colData, используя «data: {id: colData}», id возвращается как null.

Пожалуйста, помогите мне разобраться в этой проблеме, я уже давно застрял в ней. Любые предложения приветствуются.


person inspiringmyself    schedule 30.07.2012    source источник
comment
Я передаю colData контроллеру, и он содержит значения в виде строк 102,103,104,105. Вернувшись в действие контроллера, идентификатор возвращается как тот же. Я попытался получить как List ‹string› в действии контроллера, но затем он вернулся как null и, следовательно, получил как строку и пытался десериализовать идентификатор, а затем выдает ошибку.   -  person inspiringmyself    schedule 30.07.2012


Ответы (3)


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

$.ajax({
        type: 'POST',
        url: '@Url.Action("AddMe")',
        contentType: 'application/json; charset=utf-8',
        data:JSON.stringify({Id: colData}),
        dataType: "json",
success:function(){
       //do sth here
         }

         error: function () {
//do sth here
        }

        }); 

Надеюсь, это поможет.

person Piyush Sardana    schedule 31.07.2012

Я нашел решение проблемы. Вместо отправки colData в виде массива используйте Json.stringify, чтобы передать их в виде строк в контроллер, как показано ниже.

var data = Json.stringify (colData);

Затем передайте «данные» контроллеру. Действие контроллера должно по-прежнему получать его как строку, и десериализация «id» должным образом вернет список строк.

person inspiringmyself    schedule 31.07.2012

Я бы попробовал jsonstring в следующем формате.

var jsonstring = {idarray:[{"value":"102"},{"value":"103"}]}

Код позади:

    public class Idarray
{
    public string value { get; set; }
}

public class RootObject
{
    public List<Idarray> idarray { get; set; }
}
person ffffff01    schedule 30.07.2012