2

我知道已经有很多这样的了。但是,我已经尝试了几十个 SO 帖子/论坛/Kendo 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} }
                }
            }
        }
    });

这是我使用数据源的网格声明:

    $("#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?"
        }
    });

这是我在数据源声明中调用的 WebMethod 背后的代码:

    [WebMethod]
    public static string GetMembers()
    {
        var serializer = new JavaScriptSerializer();
        string json = serializer.Serialize(new { FirstName = "John", LastName = "Smith" });
        return json; 
    }

我知道它正在访问 WebMethod,因为我在数据源中放置的警报显示了正确的数据:

在此处输入图像描述

使用 firebug 的响应标头如下所示: 在此处输入图像描述

实际响应如下所示:
在此处输入图像描述

然而,网格不显示它看起来像这样的数据: 在此处输入图像描述

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

我错过了一些明显的东西吗?有没有更简单的方法来做到这一点?

4

2 回答 2

2

使用data: "d"代替data: options.data

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

于 2013-11-16T23:56:00.197 回答
1

你的代码看起来不错。您的成功功能只需进行一项更改。

更改您的代码,如下所示:

success: function (msg) {
    options.success($.parseJSON(msg.d));
}

$.parseJSON 会将您的 json 字符串转换为对象。

于 2014-05-02T16:52:07.040 回答