我写这篇文章是因为我遇到了这个问题,当我发现很多人在谈论和询问时,我发现零实际解决方案。
当您将DT更改为服务器端处理时,然后添加每列下拉过滤器,默认情况下,下拉列表将仅包含在第一页上显示的值。
基线过滤:https://datatables.net/examples/api/multi_filter_select.html任何搜索此内容的人都可能点击这篇文章:https://datatables.net/forums/discussion/48780/server-side-column-filtering-with-drop-down-get-all-options
这会给你一个领先优势,但不会有任何细节。
诀窍是获取JSON columnFilters数据并使用它来填充下拉列表。
所以你改变了:
column.data().unique().sort().each( function ( d, j ) {
select.append( '<option value="'+d+'">'+d+'</option>)
} );
至:
var json = buDueTable.ajax.json();
var filterData = json.columnFilters.Data_DT_Filters;
if (filterData != null)
{
var columnIdx = column.index();
var thisFilterdata = filterData[columnIdx];
if (thisFilterdata != null)
{
for(var j = 0; j < thisFilterdata.length; j++) {
select.append('<option value="' + thisFilterdata[j].filterItem + '">' + thisFilterdata[j].filterItem + '</option>')
}
}
}
对于我的示例,我使用IList类与另一个类的IList传递到例程来格式化JSON数据。 在第一个类中,该属性名为Data_DT_Filters,在第二个类中,该属性称为filterData,其中的单个属性名为filterItem
我希望这有助于其他人试图解决这个问题。