在 MVC c# 中分页浏览数据集而不获取新数据集

问题描述 投票:0回答:1

我的页面上有 3 个不同的功能。 1.) 搜索,2.) 排序和 3.) 分页

我已经完成了所有这些工作,但我想知道是否有人知道如何操作,或者可以向我指出如何保存每个用户的数据集,以便他们可以排序和分页而无需再次搜索,然后当用户搜索到再次拉取数据。

我目前正在使用 MVC5、Bootstrap 和 PagedList.MVC

这是我需要的一个例子。 老实说,我不确定如何或者是否应该缓存数据,但似乎我想要这样做,因为这些数据会定期更改(它们是来自数据库的事件),并且我希望用户使用他们的数据集每次分页或排序时都会进行搜索,而不是使用新的数据集。

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);
}
c# asp.net-mvc pagination asp.net-mvc-5 pagedlist
1个回答
0
投票

根据我的问题下的评论,您可以通过两种方式进行处理。 不太好但有效的方法是使用 Session 来保存数据并有条件地填充它。

我所做的研究是实际使用SQL来进行分页。 在 SQL 中,您可以设置与此类似的内容,它将提供总行数、总页数以及数据的任何页数。 据我了解,尤其是处理大量数据,这可以节省“大量”时间。 感谢所有人让我走上正轨。 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

这里有一篇非常深入的文章:
http://sqlperformance.com/2015/01/t-sql-queries/pagination-with-offset-fetch

© www.soinside.com 2019 - 2024. All rights reserved.