转换为Json并调用页面方法

时间:2013-06-18 19:57:11

标签: c# jquery asp.net ajax

我一直试图让这项工作时间过长,并认为我可能会在这里寻求帮助。我试图将javascript对象传递给服务器端,然后返回到客户端。有点像,在每次回发时我想根据某些条件更新后面或客户端的目标代码的值。我可以在这里使用hiddenfield,但我正在尝试学习ajax。 我已经声明了一个名为sortList的全局变量客户端,它存储有关哪个任务存储在哪个槽中的信息。就像它一样:

var sortList = {};
sortList[tid] = sid;

接下来我写了一个网络方法:

[WebMethod]
    public static string storeList(DragList dict)
    {
        DragList dl = dict;
        int i = 0;
        return "success";
    }
public class DragList
    {
        public string taskName { get; set; }
        public string slotName { get; set; }


    }

在客户端我用它来调用它:

console.log(JSON.stringify(sortList));
        $.ajax({
            type: "POST",
            url: "Jobs.aspx/storeList",
            data: JSON.stringify({dict: sortList}),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(msg) {
                }});
        }

我的问题是在web方法中,DragList对象dict总是为null,但在请求中,dict是一个带有值的json对象。 enter image description here

我现在已经被困在了太长时间,并且几乎计划进入隐藏领域以完成任务。但如果有人能指出我正确的方向,我真的很感激。

我做出的改变: 我使用tid作为在对象数组中找到sid的键,所以如果我把它分成几部分,我将失去键值配对。相反,我以适当的JSON格式创建了一个新字符串:

jsonStr = "{";
            var w = 0;
            for (var key in sortList) {
                var obj = sortList[key];
                jsonStr += '"key":{"taskName":"' + key + '", "slotName":"' + obj + '"},';
                w++;
            }
            jsonStr = jsonStr.substring(0, jsonStr.length - 1);
            jsonStr += '}';
            console.log(jsonStr);


        $.ajax({
            type: "POST",
            url: "Jobs.aspx/storeList",
            data: {dict: jsonStr},
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(msg) {
                }});
        }

但是现在,我收到以下错误: enter image description here

Here is my post

1 个答案:

答案 0 :(得分:1)

你的Json错了:

您将其发送为

{"taskName:mainContent_ptask5":"alotName:mainContent_palot0"}

而不是

{"taskName":"mainContent_ptask5", "alotName":"mainContent_palot0"}   

前者将属性名称视为taskName:mainContent_ptask5,因此无法取消判断您的参数名称taskNameslotName

罪魁祸首必须是:

var sortList = {};
sortList[tid] = sid; // here i guess tid is "taskName:mainContent_ptask5" and sid is "alotName:mainContent_palot0"

而是尝试这样的事情:

var tidParts = tid.split(':');
var sidParts = sid.split(':');
var sortList = { 
};
sortList[tidParts[0]] = tidParts[1];
sortList[sidParts[0]] = sidParts[1];