2012-05-17 28 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表达式。

相关问题