public JsonResult StatisticsAjax(IDataTablesRequest request, int battleID) { var data = battleRepository.GetParticipantsForBattle(battleID); var dataCount = data.Count(); if (string.IsNullOrWhiteSpace(request.Search.Value) == false) { var query = request.Search.Value.Trim().ToLower(); data = data.Where(p => p.Name.ToLower().Contains(query)); } var dataFilteredCount = data.Count(); if (request.Columns.Get("name").Sort != null) { data = data.OrderBy(p => p.Name, request.Columns.Get("name").Sort); } else if (request.Columns.Get("side").Sort != null) { data = data.OrderBy(p => p.IsAttacker, request.Columns.Get("side").Sort); } else if (request.Columns.Get("dmg").Sort != null) { data = data.OrderBy(p => p.Damage, request.Columns.Get("dmg").Sort); } else { data = data.OrderByDescending(p => p.ID); } data = data.Skip(request.Start).Take(request.Length); var war = warRepository.GetWarAssociatedWithBattle(battleID); var attackerImgUrl = Images.GetCountryFlag(war.AttackerCountryID).Path; var defenderImgUrl = Images.GetCountryFlag(war.DefenderCountryID).Path; var dataPage = data.Select(p => new { id = p.ID, name = p.Name, sideImgUrl = p.IsAttacker ? attackerImgUrl : defenderImgUrl, damage = p.Damage, imgUrl = p.ImgUrl }).ToList(); // Response creation. To create your response you need to reference your request, to avoid // request/response tampering and to ensure response will be correctly created. var response = DataTablesResponse.Create(request, dataCount, dataFilteredCount, dataPage); // Easier way is to return a new 'DataTablesJsonResult', which will automatically convert your // response to a json-compatible content, so DataTables can read it when received. return(new DataTablesJsonResult(response, JsonRequestBehavior.DenyGet)); }