0

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

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

接下来我写了一个web方法:

[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) {
                }});
        }

我的问题出在 webmethod 中,DragList 对象 dict 始终为 null,尽管在请求中,dict 是一个带有值的 json 对象。 在此处输入图像描述

我现在在这方面被困太久了,几乎打算搬到隐藏的领域来完成任务。但如果有人能指出我正确的方向,我将不胜感激。

之后我所做的更改:我使用 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) {
                }});
        }

但是现在,我收到以下错误: 在此处输入图像描述

这是我的帖子

4

1 回答 1

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];
于 2013-06-18T20:07:19.497 回答