我的页面上有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);
}
答案 0 :(得分: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