public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { base.BindModel(controllerContext, bindingContext); var request = controllerContext.HttpContext.Request; // Retrieve request data var draw = Convert.ToInt32(request["draw"]); var start = Convert.ToInt32(request["start"]); var length = Convert.ToInt32(request["length"]); // Search var search = new DTSearch { Value = request["search[value]"], Regex = Convert.ToBoolean(request["search[regex]"]) }; // Order var o = 0; var order = new List <DTOrder>(); while (request["order[" + o + "][column]"] != null) { order.Add(new DTOrder { Column = Convert.ToInt32(request["order[" + o + "][column]"]), Dir = request["order[" + o + "][dir]"] }); o++; } // Columns var c = 0; var columns = new List <DTColumn>(); while (request["columns[" + c + "][name]"] != null) { columns.Add(new DTColumn { Data = request["columns[" + c + "][data]"], Name = request["columns[" + c + "][name]"], Orderable = Convert.ToBoolean(request["columns[" + c + "][orderable]"]), Searchable = Convert.ToBoolean(request["columns[" + c + "][searchable]"]), Search = new DTSearch { Value = request["columns[" + c + "][search][value]"], Regex = Convert.ToBoolean(request["columns[" + c + "][search][regex]"]) } }); c++; } return(new DataTablesRequestModel { Draw = draw, Start = start, Length = length, Search = search, Order = order, Columns = columns }); }
public Task BindModelAsync(ModelBindingContext bindingContext) { if (bindingContext == null) { throw new ArgumentNullException(nameof(bindingContext)); } var allValues = bindingContext.HttpContext.Request.Query; // Retrieve request data var draw = Convert.ToInt32(allValues.FirstOrDefault(a => a.Key == "draw").Value); var start = Convert.ToInt32(allValues.FirstOrDefault(a => a.Key == "start").Value); var length = Convert.ToInt32(allValues.FirstOrDefault(a => a.Key == "length").Value); // Search var search = new DTSearch { Value = allValues.FirstOrDefault(a => a.Key == "search[value]").Value, Regex = Convert.ToBoolean(allValues.FirstOrDefault(a => a.Key == "search[regex]").Value) }; // Order var o = 0; var order = new List <DTOrder>(); while (allValues.Any(a => a.Key == "order[" + o + "][column]")) { Enum.TryParse(allValues.FirstOrDefault(a => a.Key == "order[" + o + "][dir]").Value, out DTOrderDir dir); order.Add(new DTOrder { Column = Convert.ToInt32(allValues.FirstOrDefault(a => a.Key == "order[" + o + "][column]").Value), Dir = dir }); o++; } // Columns var c = 0; var columns = new List <DTColumn>(); while (allValues.Any(a => a.Key == "columns[" + c + "][name]")) { columns.Add(new DTColumn { Data = allValues.FirstOrDefault(a => a.Key == "columns[" + c + "][data]").Value, Name = allValues.FirstOrDefault(a => a.Key == "columns[" + c + "][name]").Value, Orderable = Convert.ToBoolean(allValues.FirstOrDefault(a => a.Key == "columns[" + c + "][orderable]").Value), Searchable = Convert.ToBoolean(allValues.FirstOrDefault(a => a.Key == "columns[" + c + "][searchable]").Value), Search = new DTSearch { Value = allValues.FirstOrDefault(a => a.Key == "columns[" + c + "][search][value]").Value, Regex = Convert.ToBoolean(allValues.FirstOrDefault(a => a.Key == "columns[" + c + "][search][regex]").Value) } }); c++; } // Additional Values var p = 0; var additionalValues = new List <string>(); while (allValues.Any(a => a.Key == "additionalValues[" + p + "]")) { additionalValues.Add(allValues.FirstOrDefault(a => a.Key == "additionalValues[" + p + "]").Value); p++; } var model = new JqueryDataTablesParameters { Draw = draw, Start = start, Length = length, Search = search, Order = order.ToArray(), Columns = columns.ToArray(), AdditionalValues = additionalValues.ToArray() }; bindingContext.Result = ModelBindingResult.Success(model); return(Task.CompletedTask); }