3

「au」で Web グリッドをサーバー フィルター処理してページを変更すると、コントローラーへの複数の呼び出しが行われます。

  1. 最初の 0 フィルタリング、
  2. 2 番目は "a" フィルタリングを使用し、
  3. 3 つ目は「au」フィルタリングを使用します。

私のテーブルは巨大なデータをロードするため、最初の呼び出しは他の呼び出しよりも長くなります。最初に 3 番目の呼び出し結果、次に 2 番目、最後に最初の呼び出しを表示するグリッドが表示されます (この順序は、フィルター パラメーターによるコントローラーの応答時間に対応します)。

なぜすべてのコントローラー呼び出しが行われるのですか? 合計フィルター "au" でコントローラーだけを一度呼び出すことはできませんか? 私は何をすべきか ?

ここに私のグリッドがあります:

$("#" + gridId).kendoGrid({
            selectable: "row",
            pageable: true,
            filterable:true,
            scrollable : true,
            //scrollable: {
            //    virtual: true //false // Bug : Génère un affichage multiple...
            //},
            navigatable: true,
            groupable: true,
            sortable: {
                mode: "multiple", // enables multi-column sorting
                allowUnsort: true
            },
            dataSource: {
                type: "json",
                serverPaging: true,
                serverSorting: true,
                serverFiltering: true,
                serverGrouping:false, // Ne fonctionne pas...
                pageSize: '@ViewBag.Pagination',
                transport: {
                    read: {
                        url: Procvalue + "/LOV",
                        type: "POST",
                        dataType: "json",
                        contentType: "application/json; charset=utf-8"
                    },
                    parameterMap: function (options, type) {
                        // Mise à jour du format d'envoi des paramètres 
                        // pour qu'ils puissent être correctement interprétés côté serveur.
                        // Construction du paramètre sort : 
                        if (options.sort != null) {
                            var sort = options.sort;
                            var sort2 = "";
                            for (i = 0; i < sort.length; i++) {
                                sort2 = sort2 + sort[i].field + '-' + sort[i].dir + '~';
                            }
                            options.sort = sort2;
                        }
                        if (options.group != null) {
                            var group = options.group;
                            var group2 = "";
                            for (i = 0; i < group.length; i++) {
                                group2 = group2 + group[i].field + '-' + group[i].dir + '~';
                            }
                            options.group = group2;
                        }
                        if (options.filter != null) {
                            var filter = options.filter.filters;
                            var filter2 = "";
                            for (i = 0; i < filter.length; i++) {
                                // Vérification si type colonne == string.
                                // Parcours des colonnes pour trouver celle qui a le même nom de champ.
                                var type = "";
                                for (j = 0 ; j < colonnes.length ; j++) {
                                    if (colonnes[j].champ == filter[i].field) {
                                        type = colonnes[j].type;
                                        break;
                                    }
                                }

                                if (filter2.length == 0) {
                                    if (type == "string") { // Avec '' autour de la valeur.
                                        filter2 = filter2 + filter[i].field + '~' + filter[i].operator + "~'" + filter[i].value + "'";
                                    } else { // Sans '' autour de la valeur.
                                        filter2 = filter2 + filter[i].field + '~' + filter[i].operator + "~" + filter[i].value;
                                    }
                                } else {
                                    if (type == "string") { // Avec '' autour de la valeur.
                                        filter2 = filter2 + '~' + options.filter.logic + '~' + filter[i].field + '~' + filter[i].operator + "~'" + filter[i].value + "'";
                                    }else{
                                        filter2 = filter2 + '~' + options.filter.logic + '~' + filter[i].field + '~' + filter[i].operator + "~" + filter[i].value;
                                    }
                                }
                            }
                            options.filter = filter2;
                        }
                        var json = JSON.stringify(options);
                        return json;
                    }
                },
                schema: {
                    data: function (data) {
                        return eval(data.data.Data);
                    },
                    total: function (data) {
                        return eval(data.data.Total);
                    }
                },
                filter: {
                    logic: "or",
                    filters:filtre(valeur)
                }
            },
            columns: getColonnes(colonnes)
        });

これが私のコントローラーです:

[HttpPost]
    public ActionResult LOV([DataSourceRequest] DataSourceRequest request)
    {
        return Json(CProduitsManager.GetProduits().ToDataSourceResult(request));
    }
4

2 に答える 2

1

3つは初期負荷(フィルタリングなし)に対応し、フィルターの条件を入力すると次の負荷に対応しますkendoAutocompletekendoAutocomplete、リクエストを送信するタイミングを制御するいくつかのオプション(時間と最小の長さ)があります(私はできませんでした)グリッドに類似したものは見つかりません)。

問題が大量のデータのロードである場合はpageSize、定義で使用して送信されるデータのサイズを制限することをお勧めしDataSourceます。しかし、明らかに、クエリの実行に時間がかかる場合、これは解決策ではありません。

于 2012-11-21T22:57:34.873 に答える