我的页面上有 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);
}
根据我的问题下的评论,您可以通过两种方式进行处理。 不太好但有效的方法是使用 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