无法从GetJson方法获取数据

时间:2013-07-05 04:38:27

标签: c# asp.net jstree

这是我在Default.aspx中的代码:

$(function() {
        var dataSource = {};
        $("#MainTree,#SubTree").jstree({
            "json_data": {
                "ajax":{
                    type: "POST",
                    async: true,
                    url: "Default.aspx/GetJson",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    cache: false,
                    success: function(msg) {
                        dataSource = msg;
                    },
                    error: function(err) {
                        alert(err);
                    },
                    data: dataSource,
                },
            },
            "plugins": ["themes", "json_data", "ui", "dnd"]
        });
    });

这是Default.aspx.cs中的GetJson方法:

[WebGet(ResponseFormat = WebMessageFormat.Json)]
[System.Web.Services.WebMethod]
public static string GetJson()
{
    System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
    List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
    Dictionary<string, object> row = null;

    DataTable dtEmployee = new DataTable();

    dtEmployee.Columns.Add("EmpId", typeof(int));
    dtEmployee.Columns.Add("Name", typeof(string));
    dtEmployee.Columns.Add("Address", typeof(string));
    dtEmployee.Columns.Add("Date", typeof(DateTime));

    //
    // Here we add five DataRows.
    //
    dtEmployee.Rows.Add(25, "Rk", "Gurgaon", DateTime.Now);
    dtEmployee.Rows.Add(50, "Sachin", "Noida", DateTime.Now);
    dtEmployee.Rows.Add(10, "Nitin", "Noida", DateTime.Now);
    dtEmployee.Rows.Add(21, "Aditya", "Meerut", DateTime.Now);
    dtEmployee.Rows.Add(100, "Mohan", "Banglore", DateTime.Now);

    foreach (DataRow dr in dtEmployee.Rows)
    {
        row = new Dictionary<string, object>();
        foreach (DataColumn col in dtEmployee.Columns)
        {
            row.Add(col.ColumnName, dr[col]);
        }
        rows.Add(row);
    }
    return serializer.Serialize(rows);
}    

编辑: 当我检查GetJson方法时,这是结果:    { “d”: “[{\” EMPID \ “:25 \” 名称\ “:\” RK \ “\ ”地址\“:\ ”古尔冈\“,\ ”日期\“:\” \ /日期(1372999726975)\ / \ “},{\” EMPID \ “:50 \” 名称\ “:\” 萨钦\”,\ “地址\”:\ “诺伊达\”,\ “日期\”:\ “\ /日期(1372999726975)\ / \”},{\ “EMPID \”:10 \ “名称\”:\ “尼廷\”,\ “地址\”:\ “诺伊达\”,\“日期\ “:\” \ /日期(1372999726975)\ / \ “},{\” EMPID \ “:21 \” 名称\ “:\” 阿迪亚\”,\ “地址\”:\ “密拉特\”,\ “日期\”:\ “\ /日期(1372999726975)\ / \”},{\ “EMPID \”:100,\ “名称\”:\ “磨憨\”,\ “地址\”:\“班加罗尔\ “\ ”日期\“:\ ”\ /日期(1372999726975)\ / \“}]”}

结果什么都没有......它刚刚出现“..Loading”,然后它返回空白页面。请帮我展示这里的问题是什么......谢谢。

3 个答案:

答案 0 :(得分:0)

直接在浏览器中输入http://Default.aspx/GetJson,检查是否有正确的数据。

您可以添加调试代码的其他两个位置是

                success: function(msg) {
                    dataSource = msg;
                },
                error: function(err) {
                    alert(err);
                }

添加断点并调试javascript。

答案 1 :(得分:0)

响应封装在名为&#34; d&#34;的属性中。而不是datasource = msg您应该datasource = msg.d

答案 2 :(得分:0)

您似乎没有正确阅读文档,所以我建议您先这样做。

当您使用 json_data 插件时,您需要遵循如下所示的基本结构,并且可以找到here,这意味着您需要以下列格式提供Json数据:

{ 
    "data" : "node_title", 
    // omit `attr` if not needed; the `attr` object gets passed to the jQuery `attr` function
    "attr" : { "id" : "node_identificator", "some-other-attribute" : "attribute_value" }, 
    // `state` and `children` are only used for NON-leaf nodes
    "state" : "closed", // or "open", defaults to "closed"
    "children" : [ /* an array of child nodes objects */ ]
}

考虑到响应结构,您需要具有如下所示的服务器端类:

public class Emp
{
    public EmpAttribute attr { get; set; }
    public string data { get; set; }

}
public class EmpAttribute
{
    public string id;
    public bool selected;
}

你的页面方法应该在下面看起来很像:

[WebGet(ResponseFormat = WebMessageFormat.Json)]
    [System.Web.Services.WebMethod]
    public static List<Emp> GetJson()
    {
        List<Emp> empTreeArray = new List<Emp>();

        Emp emp1 = new Emp()
        {
            attr = new EmpAttribute(){ id= "25",selected=false},
            data = "Nitin-Gurgaon"
        };

        Emp emp2 = new Emp()
        {
            attr =  new EmpAttribute(){ id="50",selected=false},
            data = "Sachin-Noida"
        };
        empTreeArray.Add(emp1);
        empTreeArray.Add(emp2);
        return empTreeArray;
    }

您的客户端绑定代码应如下所示:

$(function() {
        var dataSource = {};
        $("#demo1").jstree({
            "json_data": {
                "ajax":{
                    "type": "POST",
                    "url": "Default2.aspx/GetJson",
                    "contentType": "application/json; charset=utf-8",
                    "dataType": "json",
                    success: function(msg) {
                        return msg.d;
                    },
                    error: function(err) {
                        alert(err);
                    }                   
                }
            },
            "plugins": ["themes", "json_data", "ui", "dnd"]
        });
    });

注意代码中缺少的Success函数中的 return msg.d

可以找到更多示例here

请仔细阅读下次使用的任何插件的文档。