2012-05-17 73 views
1

我有一個JqGrid,我需要發送約10Mb的數據作爲json填充網格。我發送JSON作爲這樣的內容結果:向客戶端網格發送價值10MB的數據的最佳方式是什麼?

public ContentResult GetDynamicColumnData(int? fieldListId) 
    { 
     var serializer = new JavaScriptSerializer(); 
     serializer.MaxJsonLength = Int32.MaxValue; 

     IList<FieldListView> fieldListValues = null; 
     if (fieldListId != null) 
     { 
      fieldListValues = fieldListService.GetFieldListValues(fieldListId.Value); 
     } 
     var resultData = new { fieldListValues }; 
     var result = new ContentResult 
     { 
      Content = serializer.Serialize(resultData), 
      ContentType = "application/json" 
     }; 
     return result; 
    } 

列表稱爲fieldListvalues有大約50000對象。 問題是我的Jqgrid需要大約3分鐘才能加載到Chrome中,並且根本不會加載到Firefox中。

那麼最好的方式是將大量數據發送到客戶端並將其呈現在網格中。

+5

認真嗎? 10MB?然後[我以前的答案](http://stackoverflow.com/a/10371912/575527)我可以幫助,但仍然是10MB? – Joseph

+0

用[DataTables](http://datatables.net/)替換jqGrid - >支持服務器端處理 - 因此它只能檢索用戶可見的數據... – ManseUK

+1

jqGrid支持服務器端分頁 - http:// www。 trirand.net/demoaspnetmvc.aspx使用這個方法 – ManseUK

回答

0

我會建議一個分頁。

您也可以使用增量數據加載。因此,您不斷獲取更多記錄,但用戶能夠看到屏幕並使用當前的一組數據。

0

你需要實現滾動/分頁(我相信JqGrid實現)的數據自動加載,以便網格只請求數據的用戶可查看的行數。它不會一次將10MB的數據加載到網格中。我會質疑爲什麼用戶實際上需要這麼多的數據。您可以通過預過濾等方式減少數據量。

0

答案是,真的不這樣做。如此多的數據將使網格本身變得可怕,以至於無數行使用。您可以將jqGrid配置爲分頁。您需要在C#中的方法簽名設置爲類似

public ContentResult GetDynamicColumnData(int? fieldListId, 
           string sidx, string sord, 
           bool _search, string searchField, 
           string searchOper, string searchString, 
           int page = 1, int rows = 100) 

然後你就可以通過你的字段列表值skiping總的PageIndex * pageSize的迭代的,它應該提供一個很好的用戶體驗。

當我這樣做時,我發現這篇Phil Haack文章是一個很好的起點。我也發現這是一個useful example

您可以使用_search和搜索操作數通過允許進一步過濾網格來給出正面的用戶體驗。因爲這個搜索是動態的,我通過構建Predicates來實現它,然後應用到LINQ表達式。

相關問題