我正在使用Multiselect功能选择多行并传递给控制器。 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。
请帮我弄清楚这个问题,已经有一段时间我被困在这个问题上了。任何建议都非常感谢。
答案 0 :(得分: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
}
});
$.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
}
});
我希望这会有所帮助。
答案 1 :(得分:1)
我找到了问题的解决方案。不要将colData作为数组发送,而是使用Json.stringify将它们作为字符串传递给控制器,如下所示。
var data = Json.stringify(colData);
然后,将“数据”传递给控制器。控制器操作仍然应该将其作为字符串检索,并且反序列化“id”将适当地返回字符串列表。
答案 2 :(得分: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; }
}