所以我按照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;
}
答案 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" }
}
}
}