2 Stimmen

MVC 3 RC2 Webgrid Alpträume, jemand haben Paging richtig funktioniert?

Ich verwende die neueste RC2-Version von MVC3.

Ich habe ein Webgrid und es ist mir schreckliche Probleme, insbesondere mit dem Paging und Sortieren. Mir wurde gesagt, dass das Paging jetzt effizienter sein soll und nicht die ganze Tabelle zurückziehen soll, sondern nur die Zeilen, die für die gerade angezeigte Seite benötigt werden. Das funktioniert nicht so, wie ich gehofft hatte (sehr langsam), und so habe ich es auf die einfachste Form gebracht und den Profiler hochgefahren.

Ich habe dieses ActionResult:

    public ActionResult TestGrid()
    {
        return View(ents.Decisions);
    }

Und diese Ansicht:

    @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>)
        )
    )

Das Aufrufen der Seite führt dazu, dass der Profiler dies ausführt - 11 Mal :

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]

Ich habe noch einige andere Probleme, aber wenn ich nicht einmal das hinbekomme, überlege ich, das Webgrid aufzugeben.

Ich weiß, dass es noch früh ist, da es erst seit einer Woche auf dem Markt ist, aber hat schon jemand die Paging-Funktion genutzt?

1voto

marcind Punkte 52454

An diesem Punkt kann ich bestätigen, gibt es ein Problem mit dem WebGrid als Auslieferung in MVC3 RC2, wo es nicht smartly IQueryable Daten, die Datenbank-seitige Paging unterstützt behandeln. Wir werden uns um eine Lösung für RTM bemühen. Im Moment müssen Sie das Paging manuell durchführen. Das tut uns leid.

0 Stimmen

Weiß jemand, ob dieses Problem in der RTM-Version behoben wurde?

0 Stimmen

@jesperlind Nein, leider wurde dies für RTM nicht behoben

0 Stimmen

Vielen Dank für diese Informationen. Ich schätze, wir müssen dann unsere eigene Pager-Datenlogik für das Raster bereitstellen. Ich sah einige Tutorials, wie dies zu tun, wie diese ein: dotnetcurry.com/ShowArticle.aspx?ID=618

0voto

Jon Punkte 37171

Müsste man den Pager nicht ähnlich angeben wie bei

@usersGrid.Pager(WebGridPagerModes.NextPrevious)

0 Stimmen

Ich glaube, das ist das MVC Contrib-Gitter.

0voto

Rolfvm Punkte 336

Irgendwie schade, dass IQueryables immer noch nicht unterstützt werden. Ich arbeitete um es mit einer PagedList Klasse

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();
        }
    }
}

Controller Code :

    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>()));
    }

Mit meiner Ansicht:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X