2016-11-14 11 views
0

Web Apiサーバー側のソート機能を備えたグリッドがあります。私はフィルタリングを追加する必要があります。グリッドのデータソースがフィルタリング引数をWeb APIコントローラに送信すると、Filterオブジェクトはnullではなく常に空です。剣道グリッドサーバーサイドフィルタリング(MVCを使用)

var myTeamGridDataSource = new kendo.data.DataSource({ 
    serverPaging: true, 
    serverSorting: true, 
    serverFiltering: true, 
    schema: { 
     data: "data", 
     total: "count" 
    }, 
    pageSize: 10, 
    transport: { 
     read: { 
      url: baseMyTeamUrl, // web api 
      dataType: "json", 
      type: "POST",    
     } 
    },  
    sort: { 
     field: "Name", 
     dir: "asc" 
    } 
}); 

アクション::ここに私のセットアップ

グリッドのデータソースである

public HttpResponseMessage KendoGridMyTeam(GridInputModel inputModel) 
{ 
    ... 
} 

GridInputModel.cs

public class GridInputModel 
{ 
    public int Page { get; set; } 
    public int PageSize { get; set; } 
    public int Skip { get; set; } 
    public int Take { get; set; } 
    public List<GridInputSortModel> Sort { get; set; } 
    public List<GridInputFilterModel> Filter { get; set; } 
} 

GridInputFilterModel.cs

public class GridInputFilterModel 
{ 
    public GridInputFilterModel() 
    { 
     filters = new List<GridInputFilterModel>(); 
    } 
    public string field { get; set; } 
    public string Operator { get; set; } 
    public object value { get; set; } 
    public string logic { get; set; } 
    public List<GridInputFilterModel> filters { get; set; } 

} 

はリクエストボディ

take=10&skip=0&page=1&pageSize=10&sort[0][field]=Name&sort[0][dir]=asc 
&filter[filters][0][field]=Name 
&filter[filters][0][operator]=eq 
&filter[filters][0][value]=cling 
&filter[logic]=and 

GridInputModel「GridInputModel inputModelは、」インスタンス化、およびソートオブジェクトが設定され、その機能がうまく動作します。しかし、クライアントに設定され、サーバーに送信されたときのフィルターは空です。検索の束の後、私はサーバーサイドグリッドフィルタリングの現代的な例を見つけることができません。これは、リクエストにFilterオブジェクトを作成しますが、フィルターは、空です

[DataSourceRequest] DataSourceRequest request 

:あなたは私がKendo.Mvcライブラリを使用することを示唆しています。助言がありますか?私が躊躇するオプションの1つは、parameterMapを使用して、クエリ文字列に沿ってフィルタを送信することです。もし私がしなければならない、しかし、誰かがこの仕事を持っている必要があります。

答えて

1

あなたのアプリケーションサーバサイドがフィルタオブジェクトを正しくデシリアライズしていないということです。パラメータをオブジェクトに設定し、送信された実際のJSONを表示すると、これを見ることができます。フィルタが文字列に表示されます。パラメータマップを使用し、送信前にフィルタ配列を書式設定し、剣道が使用するDataSourceClassをオーバーロードする可能性があります。私は同じ問題があり、自分のクラスを作成して送信する前にフィルタをフォーマットしなければなりませんでした。フィルタを混乱させる問題は、フィルタ配列の演算子プロパティです。

var grid = $("#YourGridId").data("kendoGrid"); 
var $filter = new Array(); 
$filter.push({ field: "Name", operator: "eq", value: "cling" }); 
grid.dataSource.filter($filter); 

、あなたはこの署名を必要とする、あなたのコントローラメソッドで:

public ActionResult ReadData([DataSourceRequest]DataSourceRequest request){ 
    ... 
} 
1

はこれを試します私のコントローラメソッドにnullフィルタが渡されました。私もコントローラメソッドに送られたリクエストパラメータを処理し、剣道のフィルタ構造を解析しようとしました。私は最終的にFalafelのブログでthis exampleに従って動作させました。具体的には、コードに以下の変更を加える必要があります。

最後に、剣道のデータソースのサーバー処理を非常に簡単に(必要なものがすべて動作するようになったら)簡単に実装することができます。

グリッドデータソース:サーバーから返されるすべての(大文字と小文字を区別する)フィールドに一致する必要があります。私はエラーを除外し、それは動作を停止しました。 WebApiを使用するには、タイプを変更する必要があります。

type: "aspnetmvc-ajax", 
schema: { 
    data: "Data", 
    total: "Total", 
    errors: "Errors", 
    model: { 
     id: "YourKeyFieldName" 
    } 
}, 

アクション:はい、剣道のDataSourceRequestオブジェクトをその属性とともに使用する必要があります。

using Kendo.MVC.UI; 
using Kendo.MVC.Extensions; 
[HttpPost] 
public ActionResult KendoGridMyTeam([DataSourceRequest] DataSourceRequest request) 
{ 
    ... 
    return Json(yourDataVariable.ToDataSource(request)); 
} 
0

私はMVCの代わりWEBAPIを使用していますが、私は同じ症状を得ていたあなたのJavaScriptで

関連する問題