我在ASP .NET MVC应用程序中使用Infragistics jQuery grid。我的数据源是引用SQL数据库的ADO .NET实体模型。以下是我的控制器中的代码,用于设置网格并为其提供数据源:
public ActionResult Index()
{
var model = new GridModel();
model.DataSourceUrl = Url.Action("GetInstrumentListData");
this.InitializeGridOptions(model);
return View(model);
}
public JsonResult GetInstrumentListData()
{
var model = new GridModel();
this.InitializeGridOptions(model);
model.DataSource = _db.InstrumentLists.OrderBy(x => x.Tag).AsQueryable<InstrumentList>();
return model.GetData();
}
private void InitializeGridOptions(GridModel model)
{
Code to create columns...
model.DefaultColumnWidth = "100px";
model.Width = "100%";
model.Height = "700px";
model.Features.Add(new GridFiltering());
var sort = new GridSorting();
sort.Mode = SortingMode.Multiple;
model.Features.Add(sort);
var paging = new GridPaging();
paging.PageSize = 30;
model.Features.Add(paging);
var selection = new GridSelection();
selection.Mode = SelectionMode.Row;
selection.MultipleSelection = true;
model.Features.Add(selection);
}
网格需要花费很长时间才能显示(25-40秒)所以我做了一些调查,这是model.GetData()
GetInstrumentListData()
中的{{1}}调用,它一直在占用。根据Intellisense,此函数首先执行数据绑定并生成JsonResult对象。
我想也许是因为我试图显示总共1000条记录(即使已启用分页并且每条视图只显示30条),可能需要一段时间才能将这些记录转换为JSON,因此我减少了数量记录到10(从1.2mb的JSON数据到12.5kb)。没有时间差异。
这是来自Firebug的请求跟踪
有关正在发生的事情的任何想法?
编辑: @allentranks的回答和@AlastairPitts评论让我意识到它实际上是我从中获取数据的来源。源不是一个表而是一个视图,它是由我的DBA从一大堆疯狂的连接中创建的。事实证明,运行查询需要13秒以上,所以难怪它需要花费很长时间才能加载。谢谢你的帮助。
答案 0 :(得分:1)
我不确定为什么您的InstrumentLists需要在查询中订购两次。
_db.InstrumentLists.OrderBy(x => x.Tag).AsQueryable<InstrumentList>().OrderBy(x => x.Tag);
这应该有效:
_db.InstrumentLists.OrderBy(x => x.Tag).ToList();
而且,您可能需要在Tag列上创建索引以更快地执行查询。
答案 1 :(得分:0)
从控制器返回的数据有问题(数据量太多.10条记录为12.5kb!)。你应该检查firebug中从服务器返回的json数据。确保您只接收网格所需且特定的数据。我建议为网格制作自定义视图模型。
作为附注,我想分享一个网格,每页有50条记录和11列,我收到的json数据是1.9 kb和967字节。