我正在使用 AngularJS 和 KendoUI 来创建一个网格,该网格从 WebAPI 网络服务中获取数据。对于网格,我希望允许服务器端排序、分页、过滤和分组。为此,我正在尝试使用KendoGridBinderEx库。
我已经下载了 KendoGridBinderEx 源代码,运行示例项目,它运行良好。但是,当我在项目中执行完全相同的操作时,当我尝试对网格中的列进行过滤时出现以下错误:
System.Linq.Dynamic.ParseException:“MyEntity”类型中不存在属性或字段“test”
“测试”是我在过滤器中输入的内容,所以它应该是过滤器文本;它不应该寻找名为“test”的属性或字段。
我已经调试并使用 Fiddler 看到请求中发送的请求的过滤器部分与示例中的工作请求完全相同,所以我认为问题不在请求端。
对于我所有的代码块,我正在简化所有内容以节省空间,并删除不相关的内容。例如,我正在删除我的数据库代码,并动态生成一个实体列表,因为这样做仍然会出现问题,因此我知道这不是我的实体框架代码的问题。
这是我的 JS 代码:
var myDataSource = {
transport: {
read: {
url: function () {
return url;
},
type: 'post',
dataType: 'json'
},
parameterMap: function (options, operation) {
if (options.filter) {
KendoGrid_FixFilter(myDataSource, options.filter);
}
if (operation === "read") {
// convert the parameters to a json object
return kendo.stringify(options);
}
return options;
}
},
serverPaging: true,
serverSorting: true,
serverFiltering: true,
serverGrouping: true
schema: {
data: 'data',
groups: 'groups',
aggregates: 'aggregates',
total: 'total',
model: {
id: "id",
fields: {
id: { type: "number" },
name: { type: "string" },
description: { type: "string" }
}
}
},
};
这是我的 WebAPI 控制器代码:
[System.Web.Http.Route("api/MyEntity")]
[System.Web.Http.HttpPost]
public KendoGridEx<MyEntity, MyEntity> GetMyEntities(KendoGridApiRequest request)
{
var entList = new List<MyEntity>();
for (int i = 0; i < 10; i++)
{
var newEntity = new MyEntity
{
Id = i,
Name = "test",
Description = "description"
};
entList.Add(newEntity);
}
return entList.AsQueryable().ToKendoGridEx<MyEntity, MyEntity>(request);
}
因此,如果我在“名称”列上设置一个“包含”过滤器,其值为“测试”,则会出现上述错误。关于为什么的任何想法?