我有一个 ASP.NET MVC 4 项目和一个 SQL 视图 (vvItem)。项目控制器
MVCAppEntities db = new MVCAppEntities();
public ActionResult Index()
{
var itemqry = db.vvItem.OrderBy(s => s.name);
//var pageditems = itemqry.Skip(10).Take(20); // 25 seconds
return View(itemqry.ToList()); // 88 seconds
}
Index.cshtml 视图
@model IEnumerable<MVCApplication1.Models.vvItem>
@{
var norows = 20;
var grid = new WebGrid(Model, canPage: true, rowsPerPage: norows);
grid.Pager(WebGridPagerModes.NextPrevious);
@grid.GetHtml(tableStyle: "table", headerStyle: "header", columns: grid.Columns(
grid.Column(columnName: "name", header: "Name", canSort: true),
grid.Column(columnName: "quantity", header: "Quantity", canSort: true),
grid.Column(columnName: "code", header: "Code", canSort: true),
grid.Column(columnName: "Price", header: "Price", canSort: true),
))}
在 vvItem 我有近 400000 条记录。我认为 webgrid Pager 只会加载 (Take()) 显示的记录,如果我要转到下一页,它会知道 Skip() 第一个记录。
问:如何有效地使视图仅加载显示的记录?
我找到了 2 个解决方案:JSON 版本和NerdDinner
我不太擅长 JSON,所以我尝试了 NerdDinner 解决方案。正如我评论的行
//var pageditems = itemqry.Skip(10).Take(20);
itemqry 已经加载了所有记录,加载需要很长时间。
Q2:我现在如何进行分页?我需要修改页码。从索引方法。
public ActionResult Index(int? page, string filter1 = " ", string filter2 = " ")