public async Task <JsonResult> CustomServerSideSearchActionAsync(DataTableDTOs.DataTableAjaxPostModel datatableAjaxPostModel) { var result = await ContactDatatableQuery(datatableAjaxPostModel); var totalResultsCount = result.Contacts.FirstOrDefault().TotalCount; var filteredResultsCount = result.FilteredCount; return(Json(new { draw = datatableAjaxPostModel.draw, recordsTotal = totalResultsCount, recordsFiltered = filteredResultsCount, data = result.Contacts })); }
private async Task <PaginatedContactsViewModel> ContactDatatableQuery(DataTableDTOs.DataTableAjaxPostModel model) { var searchBy = model.search_extra ?? model.search?.value ?? ""; // searchBy = model.search?.value ?? ""; var take = model.length; var skip = model.start; var sortBy = ""; var sortDir = ""; var pgNr = 0; if (skip > 0) { pgNr = skip / take; } else if (skip == 0) { pgNr = 1; } else { pgNr += 1; } if (model.order != null) { // we just default sort on the 1st column sortBy = model.columns[model.order[0].column].data; } sortDir = model.order[0].dir; // convert the format that datatables gave us, into a DTO that can be used by our data access layer var requestForPaginatedContacts = new ContactsGetAllPaginatedRequest { PageNumber = pgNr, PageSize = take, SearchTerm = searchBy, SortColumn = sortBy, SortOrder = sortDir }; var response = await _contactRepository.GetPaginatedResultsAsync(requestForPaginatedContacts); if (response.Success) { if (response.Contacts.Count > 0) { foreach (var item in response.Contacts) { if (item != null) { item.Action = "<a type='button' class='btn btn-light btnGridEdit' style='padding:6px; font-size: 12px !important' href='" + this.Url.Action("Edit", "Contact", new { Id = item.Id }) + "'><i class= 'fa fa-edit fa-lg'></i> EDIT</a>"; } } var converted = response.Contacts.ConvertToPaginatedViewModel(); converted.FilteredCount = response.FilteredCount; return(converted); } else { var nfText = Resource.Resource.Datatables_No_Record_Found; var nullContact = new ContactViewModel { TotalCount = 1, EMail = nfText, FirstName = nfText, LastName = nfText, TelephoneNumber_Entry = nfText }; var list = new List <ContactViewModel> { nullContact }; return(new PaginatedContactsViewModel { Contacts = list, FilteredCount = 0, TotalCount = 0 }); } } return(null); }