我正在使用最新的RC2版本的MVC3。
我有一个webgrid,它给了我可怕的问题,特别是分页和排序。 我被告知现在分页应该更有效率,而不是拉回整个表,而只需要查看您正在查看的页面所需的行。这不是我希望的(非常慢),所以把它带到了最简单的形式并启动了分析器。
我有这个ActionResult:
public ActionResult TestGrid()
{
return View(ents.Decisions);
}
这个观点:
@model IEnumerable<DecisionPanel.Web.Models.DataModel.Decision>
@{
ViewBag.Title = "TestGrid";
var usersGrid = new WebGrid(source: Model, rowsPerPage: 50);
}
<h2>TestGrid</h2>
@usersGrid.GetHtml(
tableStyle: "grid",
headerStyle: "header",
alternatingRowStyle: "alt",
rowStyle: "row",
columns: usersGrid.Columns(
usersGrid.Column("UserID", "User Id"),
usersGrid.Column("HasAgreed", "Has Agreed?"),
usersGrid.Column("Comment"),
usersGrid.Column("DateResponded", "Date of Response", format: @<text>@item.DateResponded.ToString("dd MMM yyy (HH:mm.ss)")</text>)
)
)
点击页面会导致它在分析器上运行 - 11次:
SELECT
[Extent1].[ID] AS [ID],
[Extent1].[UserID] AS [UserID],
[Extent1].[HasAgreed] AS [HasAgreed],
[Extent1].[Comment] AS [Comment],
[Extent1].[DateResponded] AS [DateResponded]
FROM [dbo].[DecisionResults] AS [Extent1]
我还有一些其他问题,但如果我甚至无法实现这一点,我正在考虑放弃webgrid。
我知道它是在一周之内出现的早期日子,但有其他人对使用分页感到高兴吗?
答案 0 :(得分:1)
此时我可以确认WebGrid在MVC3 RC2中存在问题,因为它不能智能地处理支持数据库端分页的IQueryable数据。我们将研究为RTM解决这个问题。现在你必须手动进行分页。对不起。
答案 1 :(得分:0)
你不应该指定类似于
的寻呼机@usersGrid.Pager(WebGridPagerModes.NextPrevious)
答案 2 :(得分:0)
有点搞砸了仍然不支持IQueryables。我使用PagedList类
解决了这个问题public class PagedList<T> : List<T>
{
int _pageNr;
int _pageSize;
string _orderByCol;
bool _asc;
IQueryable<T> _query;
public PagedList(int pageNumber, int pageSize, string orderBy, string direction, IQueryable<T> list)
{
var query = list;
_query = list;
if (!string.IsNullOrEmpty(orderBy))
{
if (!string.IsNullOrEmpty(direction))
{
orderBy = orderBy + " " + direction;
}
query = query.OrderBy(orderBy);
}
query = query.Skip(pageNumber * pageSize).Take(pageSize);
this.AddRange(query.ToList());
}
public int Count
{
get {
return _query.Count();
}
}
}
控制器代码:
public ActionResult Index(int page = 1, int pageSize = 2, string sort = null, string sortDir = "ASC")
{
return View(new PagedList<Something>(page-1, pageSize, sort, sortDir, Client.RetrieveAll<Something>()));
}
以我的观点:
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<div>
<%
var grid = new WebGrid(rowsPerPage: 2);
grid.Bind(
Model,
autoSortAndPage: false,
rowCount: Model.Count
);
%>
<%:
grid.GetHtml()
%>
</div>
</asp:Content>