MVC 3 RC2 Webgrid кошмары, у кого-нибудь работает корректно пейджинг? - PullRequest
2 голосов
/ 14 декабря 2010

Я использую последнюю версию RC2 MVC3.

У меня есть сетка, и она доставляет мне ужасные проблемы, особенно с разбивкой по страницам и сортировкой. Мне сказали, что подкачка теперь должна быть более эффективной, и она не должна вытягивать всю таблицу, а только строки, необходимые для просматриваемой страницы. Это не сработало, как я надеялся (очень медленно), поэтому оно приняло его в простейшем виде и загрузило профилировщик.

У меня есть этот 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]

У меня есть некоторые другие проблемы, но если я даже не могу заставить это работать, я рассматриваю отказ от веб-сетки.

Я знаю, что это были первые дни, когда он был меньше недели, но разве кто-нибудь еще испытывал радость от пейджинга?

Ответы [ 3 ]

1 голос
/ 15 декабря 2010

На данный момент я могу подтвердить, что есть проблема с WebGrid как поставкой в ​​MVC3 RC2, где она не обрабатывает данные IQueryable, которые поддерживают подкачку на стороне базы данных.Мы рассмотрим решение этой проблемы для RTM.На данный момент вам придется делать пейджинг вручную.Извините за это.

0 голосов
/ 14 февраля 2013

Кинда напутала, что 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>
0 голосов
/ 14 декабря 2010

Разве вы не должны указывать пейджер, похожий на

@usersGrid.Pager(WebGridPagerModes.NextPrevious)
...