2016-05-26 35 views
0

Ich habe 3 verschiedene Funktionen auf meiner Seite. 1.) Suchen, 2.) Sortieren und 3.) PagingSeite durch Datensatz ohne neuen Datensatz in MVC C#

Ich habe das alles funktioniert, aber ich fragte mich, ob jemand weiß, wie, oder kann mich irgendwo zeigen, wie Sie den Datensatz pro Benutzer speichern So können sie sortieren und blättern, ohne erneut zu suchen, und auch dann, wenn der Benutzer die Daten erneut sucht.

ich zur Zeit mit MVC5, Bootstrap, und PagedList.MVC

Hier ist ein Beispiel dafür, was ich brauche. Ich bin ehrlich gesagt nicht sicher, wie oder sogar, wenn ich die Daten zwischenspeichern sollte, aber es scheint, als würde ich wollen, da diese Daten sich regelmäßig ändern (sie sind Ereignisse aus einer Datenbank) und ich möchte, dass der Benutzer mit dem Dataset sie arbeiten gesucht und nicht bei jedem Seiten- oder Sortiervorgang mit einem neuen Datensatz.

private List<Models.EventItem> events = null; 

[HttpPost] 
public ActionResult ViewLogs(ViewModels.ViewLogs model) 
{ 
    if (model.ActionPerformed == "search") 
    { 
     // it was a search, so let's pull new events in. 
     events = Business.Events.GetEvents(GetCurrentSearchParameters(model)); 
    } 

    if (model.ActionPerformed == "sort") 
    { 
     events = null // need to grab events from the cached dataset? 
     // then need to perform the sort on the cached dataset. 
    } 

    if (model.ActionPerformed == "page") 
    { 
     events = null // need to grab events from the cached dataset? 
    } 

    model.EventItems = events.ToPagedList(model.CurrentPage, model.PageSize); 
    return View("ViewLogs", model); 
} 

[HttpGet] 
public ActionResult ViewLogs() 
{ 
    // ViewLogs (Get) will take defaults instead. 
    ViewModels.ViewLogs model = new ViewModels.ViewLogs(); 

    events = Business.Events.GetEvents(GetCurrentSearchParameters(model)); 
    model.EventItems = events.ToPagedList(model.CurrentPage, model.PageSize); 

    return View(model); 
} 
+0

Sie alle diese Operationen durch den Zugriff auf 'dataset.Tables [0] .DefaultView' – techspider

+0

Blick auf den Artikel durchführen kann, https: // msdn .microsoft.com/de-us/library/69c06922 (v = vs.71) .aspx – techspider

+0

Sorry vielleicht war nicht klar. Ich rufe zuerst ViewLogs() auf und zeige die Daten an. Dann veröffentlichen sie entweder eine Sortierung, eine Seite oder eine Suche und rufen ViewLogs (Modell) auf, und die Daten, die ich hatte, sind nicht mehr vorhanden. Die einzige Möglichkeit für mich ist es, den Datensatz erneut aufzurufen. Ich suche nach einer Möglichkeit, die Daten zwischen Postbacks zu halten. –

Antwort

0

Basierend auf den Kommentaren unter meiner Frage, können Sie über diese 2 Wege gehen. Das ist nicht so toll, aber funktioniert Session verwendet, um die Daten zu speichern und bedingt zu füllen.

Was ich untersucht habe, ist, tatsächlich SQL zu verwenden, um das Paging zu tun. In SQL haben Sie etwas Ähnliches eingerichtet, das Ihnen die gesamte Anzahl der Zeilen, die Gesamtzahl der Seiten und dann die Datenmenge auf jeder Seite anzeigt. Von dem, was ich verstehe, vor allem im Umgang mit großen Datenmengen, kann dies eine Menge von massiven Zeit sparen. Danke an alle, dass sie mich auf den richtigen Weg gebracht haben.

BEGIN 
DECLARE @fromDate DATETIME = DATEADD(d, -30, GETUTCDATE()) 
DECLARE @page INT = 1 
DECLARE @perPage INT = 25 
DECLARE @totalRows INT = 0 
DECLARE @totalPages INT = 0 
SET NOCOUNT ON 
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 
    -- 
    SELECT @totalRows = COUNT(*) 
    FROM 
      dbo.[Events] a 
    WHERE 
      a.[EventTime] >= @fromDate 
    ; 
    -- 
    BEGIN TRY 
      SET @totalPages = CEILING(@totalRows/@perPage); 
    END TRY 
    BEGIN CATCH 
      SET @totalPages = 0 
    END CATCH 
    -- 
    SELECT @totalRows AS [TotalRows], @totalPages AS [TotalPages]; 
    -- 
    -- 
    SELECT 
      a.[EventTime], 
      a.[Column1], 
      a.[Column2] 
    FROM 
      dbo.[Events] a 
    WHERE 
      a.[EventTime] >= @fromDate 
    ORDER BY 
      a.[EventTime] DESC 
      OFFSET (@page * @perPage) ROWS 
      FETCH NEXT @perPage ROWS ONLY 
    ; 
END 

Es ist ein ziemlich Artikel-Tiefe auf sie hier: http://sqlperformance.com/2015/01/t-sql-queries/pagination-with-offset-fetch

Verwandte Themen