Jquery 剑道UI网格WebMethod JSON

Jquery 剑道UI网格WebMethod JSON,jquery,asp.net,json,kendo-grid,webmethod,Jquery,Asp.net,Json,Kendo Grid,Webmethod,我知道已经有很多了。 然而,我已经尝试了几十个SO帖子/论坛/剑道UI站点,但仍然无法让它工作。在这件事上我已经无能为力了,任何帮助都将不胜感激 以下是我的数据源声明: var dataSource = new kendo.data.DataSource({ transport: { read: function(options) { $.ajax( {

我知道已经有很多了。 然而,我已经尝试了几十个SO帖子/论坛/剑道UI站点,但仍然无法让它工作。在这件事上我已经无能为力了,任何帮助都将不胜感激

以下是我的数据源声明:

    var dataSource = new kendo.data.DataSource({
        transport: {
            read: function(options) {
                    $.ajax( {
                            type: "POST",
                            url:  "DepartmentHome.aspx/GetMembers",
                            data: options.data,
                            contentType: "application/json; charset=utf-8",
                            dataType: "json",
                            success: function (msg) {
                                options.success(msg.d);
                                alert(msg.d);
                            }
                        });
            }

        },
        pageSize: 20,
        schema: {
            model: {
                fields: {
                    FirstName: { validation: { required: true} },
                    LastName: { validation: { required: true} }
                }
            }
        }
    });
    [WebMethod]
    public static string GetMembers()
    {
        var serializer = new JavaScriptSerializer();
        string json = serializer.Serialize(new { FirstName = "John", LastName = "Smith" });
        return json; 
    }
以下是我使用数据源的网格声明:

    $("#grid").kendoGrid({
        dataSource: dataSource,
        scrollable: true,
        groupable: false,
        sortable: true,
        pageable: {
            refresh: true,
            pageSizes: true
        },
        height: 430,
        toolbar: ["create"],
        columns: [
            { field: "FirstName", title: "First Name", width: "100px" },
            { field: "LastName", title: "Last Name", width: "100px" },
            { command: ["edit", "destroy"], width: "160px" }
            ],
        editable: {
            mode: "popup",
            confirmation: "Are you sure?"
        }
    });
以下是我在datasource声明中调用的WebMethod背后的代码:

    var dataSource = new kendo.data.DataSource({
        transport: {
            read: function(options) {
                    $.ajax( {
                            type: "POST",
                            url:  "DepartmentHome.aspx/GetMembers",
                            data: options.data,
                            contentType: "application/json; charset=utf-8",
                            dataType: "json",
                            success: function (msg) {
                                options.success(msg.d);
                                alert(msg.d);
                            }
                        });
            }

        },
        pageSize: 20,
        schema: {
            model: {
                fields: {
                    FirstName: { validation: { required: true} },
                    LastName: { validation: { required: true} }
                }
            }
        }
    });
    [WebMethod]
    public static string GetMembers()
    {
        var serializer = new JavaScriptSerializer();
        string json = serializer.Serialize(new { FirstName = "John", LastName = "Smith" });
        return json; 
    }
我知道它正在点击WebMethod,因为我在数据源中输入的警报显示了正确的数据:

使用firebug时,响应头如下所示:

实际响应如下所示:

但是,网格不显示数据,如下所示:

注意:出于某种原因,网格认为它在右下角有39个项目

我错过了什么明显的东西吗? 有更简单的方法吗?

使用数据:“d”而不是数据:选项。数据


并为模式定义中的两个字段添加字符串作为数据类型。

您的代码看起来不错。在你的成功功能中只需要一个改变

更改代码,如下所示:

success: function (msg) {
    options.success($.parseJSON(msg.d));
}
$.parseJSON将把json字符串转换为对象