0

我正在使用多选功能来选择多行并传递给控制器​​。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 创建为一个数组,目前正在向其中添加四个 ID(“102,103,104,105”)。当我调试并查看 colData 时,它包含“102,103,104,105”。然后,我将它作为字符串传递给控制器​​操作,然后反序列化它。当我反序列化它时,它会抱怨“无效的 JSON 原语:103,104,105”。

我看过其他帖子,但找不到与我的问题相关的任何内容。当我使用“data: { id: colData }”传递 colData 时,id 返回为 null。

请帮我解决这个问题,我已经被这个问题困扰了一段时间。任何建议都非常感谢。

4

3 回答 3

4

当您通过 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
        }

        }); 

我希望这有帮助。

于 2012-07-31T02:47:04.420 回答
1

我想出了问题的解决方案。不要将 colData 作为数组发送,而是使用 Json.stringify 将它们作为字符串传递给控制器​​,如下所示。

var data = Json.stringify(colData);

然后,将“数据”传递给控制器​​。控制器操作仍应将其作为字符串检索,反序列化“id”将适当地返回字符串列表。

于 2012-07-31T02:42:11.013 回答
0

我会尝试使用以下格式的 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; }
}
于 2012-07-30T21:33:59.047 回答