datatable有专门用来分页的插件,可以去官网查看。
在js里打开可以分页的开关:
table = $('#tracking').DataTable({
destroy: true,
serverSide: true, // use local process instead of server
bFilter: true, // show top right search input box.
bPaginate: true,//是否开启分页
info: true,
scrollX: true,
scrollY: '300px',
aLengthMenu: [10, 50, 200, 500,800,1000],
iDisplayLength: 50, //默认显示的记录数
sPaginationType: "full_numbers",
bScrollCollapse: true,//是否开启DataTables的高度自适应,当数据条数不够分页数据条数的时候,插件高度是否随数据条数而改变
bInfo: true,//是否显示页脚信息,DataTables插件左下角显示记录数
bProcessing: true,
ordering: true,
paging: true,
aoColumnDefs: [{ "bSortable": false, "aTargets": [ 0 ] }],
aaSorting: [[2, "asc"]],
});
在controller里抓取信息:
int StartRow = Convert.ToInt32(Request.Form["start"]); //分页
int PageSize = Convert.ToInt32(Request.Form["length"]); //分页长度
string order = Request.Form["order[0][column]"]; //要排序的列顺序
string ColumnSort = Request.Form["columns[" + order + "][data]"]; //排序的列
string DateSort = Request.Form["columns[" + order + "][name]"]; //若data为空可以定义在name里
string dir = Request.Form["order[0][dir]"]; //降序或升序
然后就出现一个极为闪耀的方法:
public static Func<T, Tkey> DynamicLambda<T, Tkey>(string propertyName)
{
ParameterExpression p = Expression.Parameter(typeof(T), "p");
Expression body = Expression.Property(p, typeof(T).GetProperty(propertyName));
var lambda = Expression.Lambda<Func<T, Tkey>>(body, p);
return lambda.Compile();
}
调用:
query.OrderByDescending(DynamicLambda<HRSSCaseModel, string>(ColumnSort)).Skip(StartRow).Take(PageSize).ToList();
query就是返回来的list,类型为var,方法类型为object