我需要显示一个可以在视图中返回可变数量列的数据表,因此我将 Mvc 3 WebGrid 绑定到 List<dynamic>,如对这篇文章的回答中所述: Populate MVC Webgrid from DataTable
它工作正常,但速度非常慢!“非常慢”是指显示一组包含 11 列的 15 条记录需要 13 秒。有什么办法可以加快这个速度吗?我试过删除寻呼机,但没有效果。
从 Ado.Net 数据表创建 List<dynamic> 的代码如下所示。它运行得非常快,这里没有问题。
var MyList = new List<dynamic>();
foreach (DataRow row in MyTable.Rows)
{
var expando = (IDictionary<string, object>)new ExpandoObject();
foreach (string column in columnNames)
{
expando.Add(column, row[column]);
}
MyList.Add(expando);
}
问题出现在视图中。下面的代码大约需要 13 秒来渲染一组 15 条记录和 11 列!访问数据库并将数据表转换为 List<dynamic> 只需不到一秒的时间。下面的代码需要 13 秒,只是为了渲染。我究竟做错了什么?还是我只是使用 List<dynamic> 找出错误的树?
var grid = new WebGrid(canPage: true, rowsPerPage: Model.PageSize, canSort: false);
grid.Bind(Model.MyList, rowCount: (int)Model.RowCount, autoSortAndPage: false);
grid.Pager(WebGridPagerModes.All);
@grid.GetHtml(tableStyle: "webgrid",
rowStyle: "webgrid-row",
alternatingRowStyle: "webgrid-alternating-row",
htmlAttributes: new { id = "tblSearchResults" },
firstText: "<<First",
lastText: "Last>>", mode: WebGridPagerModes.All
)