2012-11-21 39 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次我的控制器......页面有没有一种方法来禁用此功能? –