AngularJS を KendoUI と共に使用して、WebAPI Web サービスからデータを取得するグリッドを作成しています。グリッドについては、サーバー側の並べ替え、ページング、フィルタリング、およびグループ化を許可したいと考えています。この目的のために、KendoGridBinderExライブラリを使用しようとしています。
KendoGridBinderEx ソースをダウンロードし、サンプル プロジェクトを実行すると、問題なく動作します。ただし、プロジェクトでまったく同じことを行うと、グリッドの列でフィルターを実行しようとすると、次のエラーが発生します。
System.Linq.Dynamic.ParseException: タイプ 'MyEntity' にプロパティまたはフィールド 'test' が存在しません
「test」はフィルターに入力しているものなので、フィルター テキストにする必要があります。「test」というプロパティやフィールドを探すべきではありません。
私は Fiddler をデバッグして使用し、リクエストで送信されるリクエストのフィルター部分が例の作業中のリクエストとまったく同じであることを確認したので、問題はリクエスト側にあるとは思いません。
すべてのコード ブロックについて、スペースを節約し、関係のないものを切り取るために、すべてを単純化しています。たとえば、データベース コードを切り取り、その場でエンティティのリストを生成していますが、それでも問題が発生するため、Entity Framework コードの問題ではないことがわかっています。
これが私の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);
}
したがって、「名前」列に「テスト」の値で「含む」フィルターを設定すると、上記のエラーが発生します。理由についてのアイデアはありますか?