public Task BindModelAsync(ModelBindingContext bindingContext) { if (bindingContext == null) { throw new ArgumentNullException(nameof(bindingContext)); } var formReq = bindingContext.HttpContext.Request.Query; var page = new StringValues(); formReq.TryGetValue("page", out page); var limit = new StringValues(); formReq.TryGetValue("limit", out limit); var sortBy = new StringValues(); formReq.TryGetValue("sortBy", out sortBy); var direction = new StringValues(); formReq.TryGetValue("direction", out direction); var name = new StringValues(); formReq.TryGetValue("name", out name); var nationality = new StringValues(); formReq.TryGetValue("nationality", out nationality); var placeOfBirth = new StringValues(); formReq.TryGetValue("placeOfBirth", out placeOfBirth); var result = new GetPlayersDto() { page = Convert.ToInt16(page), limit = Convert.ToInt16(limit), sortBy = sortBy.ToString(), direction = direction.ToString(), name = name.ToString(), nationality = nationality.ToString(), placeOfBirth = placeOfBirth.ToString() }; bindingContext.Result = ModelBindingResult.Success(result); return(Task.CompletedTask); }
public JsonResult GetPlayers([ModelBinder(typeof(GetPlayersDtoBinder))] GetPlayersDto vm) { List <Asp.NetCore.Models.DTO.Player> records; int total; var query = _context.Players.Select(p => new Asp.NetCore.Models.DTO.Player { ID = p.ID, Name = p.Name, PlaceOfBirth = p.PlaceOfBirth, DateOfBirth = p.DateOfBirth, CountryID = p.CountryID, CountryName = p.Country != null ? p.Country.Name : "", IsActive = p.IsActive, OrderNumber = p.OrderNumber }); if (!string.IsNullOrWhiteSpace(vm.name)) { query = query.Where(q => q.Name.Contains(vm.name)); } if (!string.IsNullOrWhiteSpace(vm.nationality)) { query = query.Where(q => q.CountryName != null && q.CountryName.Contains(vm.nationality)); } if (!string.IsNullOrWhiteSpace(vm.placeOfBirth)) { query = query.Where(q => q.PlaceOfBirth != null && q.PlaceOfBirth.Contains(vm.placeOfBirth)); } if (!string.IsNullOrEmpty(vm.sortBy) && !string.IsNullOrEmpty(vm.direction)) { if (vm.direction.Trim().ToLower() == "asc") { switch (vm.sortBy.Trim().ToLower()) { case "name": query = query.OrderBy(q => q.Name); break; case "countryname": query = query.OrderBy(q => q.CountryName); break; case "placeOfBirth": query = query.OrderBy(q => q.PlaceOfBirth); break; case "dateofbirth": query = query.OrderBy(q => q.DateOfBirth); break; } } else { switch (vm.sortBy.Trim().ToLower()) { case "name": query = query.OrderByDescending(q => q.Name); break; case "countryname": query = query.OrderByDescending(q => q.CountryName); break; case "placeOfBirth": query = query.OrderByDescending(q => q.PlaceOfBirth); break; case "dateofbirth": query = query.OrderByDescending(q => q.DateOfBirth); break; } } } else { query = query.OrderBy(q => q.OrderNumber); } total = query.Count(); if (vm.page.HasValue && vm.limit.HasValue) { int start = (vm.page.Value - 1) * vm.limit.Value; records = query.Skip(start).Take(vm.limit.Value).ToList(); } else { records = query.ToList(); } return(new JsonResult(new { records, total })); }