2011-12-19 38 views
0

有什么办法可以禁用jqgrid本地缓存? 我有一个页面,你建立了一些过滤器,并基于这个参数创建jqgrid。如何禁用jqgrid本地缓存?

问题是,jqgrid不会改变postdata参数!我的意思是,在第二,第三,第四等搜索,结果总是等于第一个。 我jqGrid的设置是:

jQuery.extend(jQuery.jgrid.defaults, { 
     ajaxGridOptions: { 
      contentType: 'application/json;', 
      type: "POST", 
      cache: false, 
      beforeSend: function() { 
       $(".loading").show(); 
      } 
     }, 
     serializeGridData: function (postData) { 
      return JSON.stringify(postData); 
     }, 
     datatype: 'json', 
     autowidth: true, 
     height: '100%', 
     rowNum: 10, 
     rowList: [10, 20, 30], 
     hidegrid: false, 
     prmNames: { 
      search: "isSearch", 
      nd: null, 
      rows: "numRows", 
      page: "numPage", 
      sort: "orderBy", 
      order: "orderType" 
     }, 
     viewrecords: true, 
     gridComplete: function() { 
      $(".loading").hide(); 
     }, 
     jsonReader: { 
      root: function (obj) { return obj.d.rows; }, 
      page: function (obj) { return obj.d.page; }, 
      total: function (obj) { return obj.d.total; }, 
      records: function (obj) { return obj.d.rows.length; }, 
      repeatitems: false 
     } 
    }); 

的jqGrid的创作:

$myGrid.jqGrid({ 
     postData: { from: jQuery.parseDate(fromQueryString), to: jQuery.parseDate(toQueryString) }, 
     url: "/Search.aspx/Find", 
     colNames: ['Test'], 
     colModel: [ 
     { name: 'Test', index: 'Test', sortable: false, width: 40 } 
     ], 
     sortname: "Date", 
     sortorder: "desc", 
     jsonReader: { id: "ID" }, 
     pager: "pagerControl", 
     caption: "Results" 
}); 

回答

1

如果我理解正确的话,页面已经控制建立像input#frominput#to一些控件(<input>领域以 “从” IDS和“to”),它定义了你发送到服务器的时间间隔以及其他参数。

我想你的代码看起来像

var $myGrid = $("#list"), 
    fromQueryString = "", 
    toQueryString = "", 
    createGrid = function() { 
     $myGrid.jqGrid({ 
      postData: { 
       from: jQuery.parseDate(fromQueryString), 
       to: jQuery.parseDate(toQueryString) 
      }, 
      url: "/Search.aspx/Find", 
      colNames: ['Test'], 
      colModel: [ 
       { name: 'Test', index: 'Test', sortable: false, width: 40 } 
      ], 
      sortname: "Date", 
      sortorder: "desc", 
      jsonReader: { id: "ID" }, 
      pager: "pagerControl", 
      caption: "Results" 
     }); 
    }, 
    myRefresh = function() { 
     var fromQueryString = $("#from").val(), 
      toQueryString = $("#to").val(); 

     createGrid(); 
    }; 

$("#from").change(myRefresh); 
$("#from").change(myRefresh); 
createGrid(); 

的问题是,上面的代码是错误createGrid仅在第一次创建网格,然后(在myRefresh之内),它在测试之后不会产生任何效果,即已经创建了网格$myGrid。你可以理解这一点,你可以想象网格的很多部分:标题,列标题,寻呼机等等,必须只创建一次。在下一次只需要重新加载网格体的内容

刷新jqGrid的正确方法是调用.trigger("reloadGrid")而不是尝试创建网格乘法时间。人们可以修复代码以下

var $myGrid = $("#list"), 
    fromQueryString = "", 
    toQueryString = "", 
    createGrid = function() { 
     $myGrid.jqGrid({ 
      postData: { 
       from: function() { 
        return jQuery.parseDate($("#from").val()); 
       }, 
       to: function() { 
        jQuery.parseDate($("#to").val()); 
       } 
      }, 
      url: "/Search.aspx/Find", 
      colNames: ['Test'], 
      colModel: [ 
       { name: 'Test', index: 'Test', sortable: false, width: 40 } 
      ], 
      sortname: "Date", 
      sortorder: "desc", 
      jsonReader: { id: "ID" }, 
      pager: "pagerControl", 
      caption: "Results" 
     }); 
    }, 
    myRefresh = function() { 
     $myGrid.trigger("reloadGrid", [{page: 1}]); 
    }; 

$("#from").change(myRefresh); 
$("#from").change(myRefresh); 
createGrid(); 

在方法frompostDatato将在每个网格重载被称为情况。例如,如果用户单击列标题来更改网格排序,或者用户选择显示网格的另一个页面。您可以阅读更多关于该方法的here

你可以另外改变的唯一东西是serializeGridData的代码,它应该测试postData的属性并在需要时调用该函数。详细信息请参见here

+0

我的方法是调用.jqGrid('GridUnload') – Alexandre 2011-12-19 18:52:25

+0

@Alexandre。 'GridUnload'的使用是可能的,但是你的问题肯定存在于你没有发布的代码部分。在哪里填写'fromQueryString'和'toQueryString'的代码以及你使用'GridUnload'的地方?此外,我发现你使用'url:“/Search.aspx/Find”' - 使用ASPX而不是ASMX扩展或ASHX的URL。你能否扩展你使用的代码? – Oleg 2011-12-19 20:03:11

+0

这是webmethods,看看http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/ – Alexandre 2011-12-20 12:09:16