Привет всем,
Я использую JqueryDataTable с обработкой на стороне сервера, и она отлично работает (разбиение на страницы, упорядочивая все функции на стороне сервера). Но когда мой набор данных больше, чем 40000, показать все данные для использования функций экспорта (печать, PDF, Excel) не работает.
Когда я выбираю длину, например, 1000 или 10000, это медленно, но показывает. Но выбирая «все» и, если набор данных превышает 40000, происходит сбой хрома.
Есть какие-нибудь советы по разработке или исправили?
Код клиента
var dataTableObj = $('#ContactTable').DataTable({
serverSide: true,
processing: true,
searchDelay: 1000,
lengthMenu: [[10, 25, 50, 100, 1000, 2147483647], [10, 25, 50, 100, 1000, "all"]],
ajax: {
"url": "/Contact/GetContacts",
"type": "POST",
"datatype": "json",
"data": function (d) {
d.mainFilter = $("#ContactTable_filter > label > input").val();
d.typeId = 0;
}
},
caseInsensitive: true,
fixedHeader: true,
autoWidth: true,
scrollX: true,
columns: [
{
"data": "contactId",
"render": function (data, type, JsonResultRow, meta) {
return ' ';
}
},
{
"data": "contactId",
"render": function (data, type, JsonResultRow, meta) {
var content = '<a title="Düzenle" href="/Email/EmailDetail?mailId=' + JsonResultRow.contactId + '" class="btn btn-xs hidden-xs purple btn-outline"><span class="fa fa-edit"></span></a>';
return content;
}
},
{ "data": "contactName" },
{ "data": "contactId" },
{
"data": "contactTypeId",
"render": function (data, type, JsonResultRow, meta) {
var content = "";
if (JsonResultRow.contactTypeId == 1) {
content = '<span class="fa fa-envelope"> </span> <span class="">Email</span> </a>';
}
else {
content = '<span class="icon-layers"> </span> <span class="">SMS</span> </a>';
}
return content;
}
},
],
dom: 'Blfrtip',
buttons: [
{
extend: 'print', text: '<span class="fa fa-print"></span> Yazdır', className: 'btn btn-xs blue btn-outline hidden-xs btn-circle'
},
{
extend: 'excelHtml5', text: '<span class="fa fa-file-excel-o"></span> Excel', className: 'btn btn-xs blue btn-outline hidden-xs btn-circle'
},
],
});
Код на стороне сервера (C #)
public DataTableContactData GetContacts(DataTableSendParameters parameters, int typeId = 0)
{
string _filter = string.IsNullOrEmpty(parameters.mainFilter) ? "" : parameters.mainFilter.ToLower();
int _typeId = (typeId == 0) ? 0 : typeId;
DataTableContactData jdtData = new DataTableContactData();
IQueryable<Contacts> allData = _ContactsDal.Table.Where(x => (x.ContactTypeId == _typeId || _typeId == 0));
List<Contacts> model = allData.Where(x => (x.ContactId.ToLower().Contains(_filter.ToLower()) || _filter == "")).ToList();
jdtData.draw = parameters.draw;
jdtData.recordsTotal = allData.Count();
jdtData.recordsFiltered = model.Count();
jdtData.data = model.Skip(parameters.start).Take(parameters.length).ToList();
return jdtData;
}