MVC 3 RC2 Webgrid噩梦,任何人都有正确的分页工作?

时间:2010-12-14 11:17:53

标签: asp.net-mvc-3 webgrid

我正在使用最新的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。

我知道它是在一周之内出现的早期日子,但有其他人对使用分页感到高兴吗?

3 个答案:

答案 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>