我有Odata WebApi,我想用我的数据填充我的下拉列表。 我有数据源:
var postsDataSource = new kendo.data.DataSource({
type: 'odata',
serverFiltering: true,
transport: {
read: {
url: "/odata/Posts",
dataType: "json"
},
},
schema: {
model: kendo.data.Model.define({
Id: "Id",
RegionId: "RegionId"
}),
data: function (res) {
debugger;//this code is inaccessible!
console.log(res);
return res.value;
}
},
});
和下拉列表如下:
var posts = $("#searchPost").kendoDropDownList({
optionLabel: "Выберите регион...",
dataTextField: "NameRu",
dataValueField: "Id",
dataSource: postsDataSource,
}).data("kendoDropDownList");
这部分代码执行odata查询并在firebug的控制台中返回以下json响应:
{
"odata.metadata":"http://localhost:11029/odata/$metadata#Posts","odata.count":"13","value":[
{
"Id":0,"Number":"Lenina45","RegionId":1,"NameRu":"\u041b\u0435\u043d\u0438\u043d\u0430 45","NameKz":"\u041b\u0435\u043d\u0438\u043d\u0430 45","ShortName":"\u041b\u0435\u043d\u0438\u043d\u0430 45","DateBegin":null,"DateEnd":null,"OptimisticLockField":null
},{
"Id":1,"Number":"Zhumabaeva15","RegionId":2,"NameRu":"\u0416\u0443\u043c\u0430\u0431\u0430\u0435\u0432\u0430 15","NameKz":"\u0416\u0443\u043c\u0430\u0431\u0430\u0435\u0432\u0430 15","ShortName":"\u0416\u0443\u043c\u0430\u0431\u0430\u0435\u0432\u0430 15","DateBegin":null,"DateEnd":null,"OptimisticLockField":null
},
.....
]
}
在此响应之后,我收到以下奇怪的错误:
TypeError:d.d未定义; 并且dropdownlist没有显示我在json响应之上。 当我使用odata web api填充kendo网格时,数据源中的以下代码解决了我的问题:
schema: {
data: function (res) {
return res.value;
}
},
但现在,当我将它用于下拉列表时,它根本不起作用,它无法访问。
PS>抱歉我的英语不好。
答案 0 :(得分:0)
您的数据在您的回复的内部对象“值”上,您的回复包括页面大小,元数据网址,因此我们需要删除kendo dataSource可以理解的数据,这是一个示例
:注意删除“type:'odata'”并检查,因为你说的数据来自Data函数的数据源,我认为不需要它。
var postsDataSource = new kendo.data.DataSource({
serverFiltering: true,
transport: {
read: {
url: "/odata/Posts",
dataType: "json"
},
},
schema: {
model: {
Id: "Id",
fields: {
Id: { type: "number" },
NameRu: { type: "string" },
NameKz: { type: "string"},
ShortName: { type: "string" }
}
},
data: function (response) {
return response.value;
},
total: function(response) {
return response.odata.count;
}
},
});
试试这个希望这会有所帮助。