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 groupBy = new StringValues(); formReq.TryGetValue("groupBy", out groupBy); var groupByDirection = new StringValues(); formReq.TryGetValue("groupByDirection", out groupByDirection); var result = new GetPlayersGroupingDto() { page = Convert.ToInt16(page), limit = Convert.ToInt16(limit), groupBy = groupBy.ToString(), groupByDirection = groupByDirection.ToString() }; bindingContext.Result = ModelBindingResult.Success(result); return(Task.CompletedTask); }
public JsonResult GetPlayersGrouping([ModelBinder(typeof(GetPlayersGroupingDtoBinder))] GetPlayersGroupingDto 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.Name, OrderNumber = p.OrderNumber }); if (vm.groupBy == "countryName") { if (vm.groupByDirection.Trim().ToLower() == "asc") { query = query.OrderBy(q => q.CountryName).ThenBy(q => q.OrderNumber); } else { query = query.OrderByDescending(q => q.CountryName).ThenBy(q => q.OrderNumber); } } 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 })); }