2

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

我知道它在一周内发布还为时过早,但是其他人使用分页有什么乐趣吗?

4

3 回答 3

1

在这一点上,我可以确认 WebGrid 在 MVC3 RC2 中存在问题,它不能巧妙地处理支持数据库端分页的 IQueryable 数据。我们将考虑为 RTM 解决这个问题。现在,您必须手动进行分页。对于那个很抱歉。

于 2010-12-14T23:08:29.070 回答
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>
于 2013-02-14T06:38:36.353 回答
0

您不应该指定类似于的寻呼机吗

@usersGrid.Pager(WebGridPagerModes.NextPrevious)
于 2010-12-14T20:07:40.260 回答