2011-12-19 70 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