【发布时间】:2021-04-14 04:40:40
【问题描述】:
我正在使用 jquery 数据表来显示客户数据。我正在使用服务器端处理。但是我对如何使用 recordsFilteredProperty 有点困惑。当我将其设置为客户表的总数时,一切都显示正常,但是当我滚动到第 2 页时,没有预期的数据。但是,如果我将 recordsFiltered 更改为 result.Count,那么我将显示 10 个中的 1 个,并且只有一个页面显示用于分页,并且上一个和下一个按钮被禁用。
这是我的 MVC 代码:
public IActionResult GetCustomers(DataTableAjaxPostModel model)
{
var totalCount = DatabaseLogic.GetCustomersCount();
var filteredCount = totalCount;
string sortBy = "";
string sortDir = "";
if (model.order != null)
{
sortBy = model.columns[model.order[0].column].data;
sortDir = model.order[0].dir.ToLower();
}
totalCount = DatabaseLogic.GetCustomersCount();
var search = model?.search?.value == "" ? "" : model?.search?.value;
int startRec = model.start;
int pageSize = model.length;
var result = DatabaseLogic.GetCustomers(startRec, pageSize, search, sortBy, sortDir);
return Json(new { draw = model.draw, recordsTotal = totalCount, recordsFiltered = filteredCount, data = result });
}
数据表截图:
【问题讨论】:
-
如果这提供了一个快速的答案,您是否在official documentation 中看到了
recordsTotal和recordsFiltered的定义?这能解决问题吗?这些与start和length的sent parameter 值一起用于构建您看到的分页信息和控件。如果仍然不清楚,也许更详细的示例可能会对您有所帮助。 -
是的,谢谢。但是问题来了,我将 start 和 length 传递给查询以仅返回该页面的那些记录,所以我必须有第二个查询来返回过滤后的行数?
-
这是一种方式。如果您将过滤和分页合并为一个(数据库?)操作,那么您将不知道过滤记录的总数。我这样做的方法是仅从数据库中过滤(和排序) - 然后根据分页要求从应用服务器的结果集中获取所需的切片。根据您的数据量,这可能是可接受的,也可能是不可接受的。
-
我迷路了,我做了一个单独的查询来返回过滤后的行减去 - 分页,仍然只有一个分页项,并且上一个和下一个按钮被禁用
-
单独的步骤是: (1) 从数据库中获取结果集。这包含与请求的过滤器匹配的所有数据,以及请求的排序顺序。步骤(2):在我的应用层,然后我处理这个结果集以提取需要发送到 DataTables 的特定 n 行(例如,第 3 页的 10 行)。因为我这样做了,所以我从步骤 (1) 中知道我有多少过滤记录。当然,我仍然需要(单独)检查总条记录。
标签: jquery asp.net-mvc asp.net-core model-view-controller datatables