kendo UI网格数据源asp webforms

时间:2012-09-06 21:53:18

标签: c# jquery asp.net ajax kendo-ui

所以我按照Kendo Provides使用外部数据源的示例,出于某种原因,当你输入Default.aspx / GetEvents的URL(其中GetEvents是Default.aspx中的web方法)时,它返回整个Default.aspx的HTML,而不是在正常的AJAX调用中调用webmethod。

所以我找到了解决方法,我使用本地数据源方法,该方法调用javascript函数 - 这个javascript函数在default.aspx中对我的webmethod进行自己的ajax调用并获得成功的响应

所以这是我的代码

 $(document).ready(function () {
                $("#grid").kendoGrid({
                    dataSource: {
                        data: createRandomData(),
                        schema: {
                            data: "d"
                        },
                        pageSize: 10
                    },
                    height: 250,
                    scrollable: true,
                    sortable: true,
                    filterable: true,
                    pageable: {
                        input: true,
                        numeric: false
                    },
                    columns: [
                        {
                            field: "Title",
                            title: "Title",
                            width: 100
                        },
                        {
                            field: "StartDate",
                            title: "StartDate",
                            width: 100
                        },
                        {
                            field: "Keywords",
                            width: 100
                        }
                    ]
                });
            });

这是createRandomData()返回的开始 - 它是有效的json - 我只是不想粘贴它并使这个问题不可读

"d" : [
{
    "Title": "Chicago BlackHawks vs. Detroit Redwings",
    "StartDate": "9/7/2012 12:00:00 AM",
    "Keywords": "-- Select --"
},
{
    "Title": "",
    "StartDate": "1/1/1900 12:00:00 AM",
    "Keywords": "-- Select --"
}, .......

我认为没有理由说这不起作用,现在网格只是说“加载......”并且永远保持这样,没有控制台错误

                    function createRandomData() {
                    $.ajax({
                        type: "POST",
                        url: "MyEvents.aspx/GetEvents",
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: function (msg) {                                
                            var rs = msg;
                            return rs;
                        }
                    });
                    return false;
                }

2 个答案:

答案 0 :(得分:5)

可能的问题是,当使用data元素时,KendoUI期望进行简单的javascript调用(不使用AJAX)。当你调用JS方法时,它立即返回,但是AJAX调用需要更长的时间才能完成,但是当调用完成时,Kendo网格永远不会得到通知。

您可以尝试使用dataSource here上的transport.read对象。这样,网格应该可以在AJAX调用中正常工作。

编辑: 你尝试过这样的事情:

dataSource: {
    transport: {
        read: function(options) {
            $.ajax({
                type: "POST",
                url: "MyEvents.aspx/GetEvents",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {                                
                    options.success(msg.d);
                }
            });
        }
     }
}

答案 1 :(得分:0)

或许更改您的架构定义:

来自这个

schema: {
 data: "d"
}

到这个

schema: {
 model: {
  fields: {
    Title: { type: "string" },
    StartDate: { type: "string" },
    Keywords: { type: "string" }
   }
 }
}