我有一个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中。
那么将大量数据发送到客户端并在网格中呈现它的最佳方法是什么。
答案 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表达式。