2012-11-21 65 views
3

頁時,當「AU」我的服務器過濾我的網絡網格,改變頁面,控制器多個呼叫完成:網絡網格服務器分頁觸發多個控制器更換呼叫

  1. 先用0過濾,
  2. 第二以 「a」 的過濾,
  3. 第三與 「AU」 濾波。

我的表加載大量數據,因此第一個電話就是比別人更長的時間。 我看到網格首先顯示第三個呼叫結果,然後是第二個,最後是第一個呼叫(由於過濾器參數,此順序對應於我的控制器的響應時間)

爲什麼所有的控制器調用都是? 不能只是我的控制器曾經與我的總過濾器「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)); 
    } 

回答

1

的3對應於初始負載(未過濾)和以下的,你在的條件類型過濾器,在kendoAutocompletekendoAutocomplete相似的還有一對夫婦的控制,當發送請求(我找不到網格類似的話)的選項(時間和最小長度)。

如果您的問題是加載大量數據,我建議限制在DataSource定義中使用pageSize傳輸的數據的大小。但是,顯然,如果需要很長時間纔會執行查詢,這不是一個解決方案。

0

在這些場景中,建議創建打字延遲並因此執行當用戶已經停止打字(除非他是打字比普通打字慢)的請求。

要創建一個延遲,我可以建議你如下:

<script type="text/javascript">   
    var globalTimeout = null; 
    $('#searchInput').keyup(function() { 
     if (globalTimeout != null) clearTimeout(globalTimeout); 
     globalTimeout = setTimeout(SearchFunc, 500); 
    }); 

    function SearchFunc(){ 
     globalTimeout = null; 
     $('#yourGridName').data('kendoGrid').dataSource.filter({ field:"theField",operator:"startswith",value:$('#searchInput').val() }) 
    } 
    </script> 
+0

看起來甚至有計時器也有一些是在保存連續的過濾器網格:如果鍵入「AU」,顯示結果,然後退格爲「A」,並重新顯示結果,當我改變電網調用2次我的控制器......頁面有沒有一種方法來禁用此功能? –