我有一个asp.net mvc网站,我用json数据加载jqgrid
这是我的控制器操作代码:
public ActionResult GridData(GridData args)
{
IEnumerable<Application> applications = EntityModel.GetAll().ToList();
applications = FilterEntities(applications);
if (args.sidx.IsNullOrEmpty() || args.sidx == "Id")
{
args.sidx = "Name";
args.sord = "asc";
}
applications = applications.GridSort(args.sidx, args.sord);
var paginatedData = applications.GridPaginate(args.page ?? 1, args.rows ?? 10,
i => new
{
i.Id,
Name = "<div class='showDescription' Id= '" + i.MyId + "'>" + i.Name + "</div>",
MyId = string.Format("<a i.LastUpdated,
i.LastUpdatedColumn
});
return Json(paginatedData);
}
这是我的javascript代码:
function doInitCrudGrid(controller, names, model, editable, querystring) {
jQuery("#grid").jqGrid({
mtype: 'POST',
url: "/" + controller + "/GridData?" + querystring,
datatype: "json",
colNames: names,
colModel: model,
imgpath: "/Scripts/jqGrid/themes/steel/images",
rowNum: 20,
rowList: [10, 20, 50, 999],
altRows: true,
altclass: "altRow",
jsonReader: {
root: "Rows",
page: "Page",
total: "Total",
records: "Records",
repeatitems: false,
id: "Id"
},
pager: "#pager",
height: "auto",
sortname: "Id",
viewrecords: true,
sortorder: "desc",
loadComplete: function() {
alert("Load Complete");
},
ondblClickRow: function(rowid) { }
});
我在
上有一个断点return Json(paginatedData);
行并且会很快被击中,但之后需要大约10秒钟才能完成:
alert("Load Complete");
以及渲染显示在网页上。
无论如何调试这个或方法,看看为什么在完成服务器端json和在javascript回调上对loadcomplete进行组织之间会有这么大的延迟?
答案 0 :(得分:1)
为了确定您遇到问题的地方,我建议您测量双方的时间。例如,在您的JavaScript中执行以下操作:
var startTime = new Date();
// do something
var totalTime = new Date() - startTime;
并在您的控制器操作中
using System;
public ActionResult GridData(GridData args) {
DateTime startTime = DateTime.Now;
// do something
TimeSpan totalTime = DateTime.Now - startTime;
// save or log totalTime
System.DateTime date4 = date3.Subtract(diff1);
return Json(paginatedData);
}
在此之后,您将确切地知道您遇到主要性能问题的哪一方。
答案 1 :(得分:0)
你回来了多少数据?序列化和反序列化可能需要很长时间。您是否考虑过返回PartialView并用返回的html替换div的内容?