向客户端网格发送价值10 MB的数据的最佳方法是什么?

时间:2012-05-17 08:57:40

标签: javascript asp.net-mvc-3 jqgrid-asp.net

我有一个JqGrid,我需要发送大约10Mb的数据作为json来填充网格。我发送Json作为内容结果如下:

    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的List有大约50000个对象。 问题是我的Jqgrid在Chrome中加载需要3分钟,而且根本不会加载到Firefox中。

那么将大量数据发送到客户端并在网格中呈现它的最佳方法是什么。

3 个答案:

答案 0 :(得分:0)

我建议加分。

您还可以使用增量数据加载。因此,您可以继续获取更多记录,但用户可以看到屏幕并使用当前数据集。

答案 1 :(得分:0)

您需要在滚动/分页(我相信JqGrid实现)上实现数据的自动加载,以便网格仅请求用户“可查看”的行数的数据。它只是不能同时将10MB的数据加载到网格中。我会质疑为什么用户实际上需要同时存在大量数据。您可以通过预过滤等来减少数据量。

答案 2 :(得分: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)

然后你可以遍历你的字段列表值,浏览pageIndex * pageSize的总数,它应该提供一个很好的用户体验。

当我这样做时,我发现这篇Phil Haack文章是一个很好的起点。我还发现这是一个useful example

通过允许进一步过滤网格,您可以使用_search和搜索操作数来提供积极的用户体验。因为这个搜索是动态的,所以我通过构建谓词来实现它,然后应用于LINQ表达式。