public bool BindModel(System.Web.Http.Controllers.HttpActionContext actionContext, ModelBindingContext bindingContext) { try { if (bindingContext.ModelType != typeof(GridQuery)) { return(false); } var request = actionContext.Request.Content.ReadAsFormDataAsync().Result; GridQuery model = new GridQuery(); foreach (string key in request.Keys) { if (!model.PostData.ContainsKey(key)) { model.PostData.Add(key, request[key]); } } var keyValues = actionContext.Request.GetQueryNameValuePairs(); foreach (var item in keyValues) { if (!model.PostData.ContainsKey(item.Key)) { model.PostData.Add(item.Key, item.Value); } } model.HasFilter = bool.Parse(request["_search"] ?? "false"); model.PageIndex = int.Parse(request["page"] ?? "1"); model.PageSize = int.Parse(request["rows"] ?? "10"); var sidx = request["sidx"]; if (!string.IsNullOrEmpty(sidx)) { model.HasSort = true; var list = sidx.Split(','); foreach (var item in list) { if (item.IndexOf("asc") > -1) { model.SortInfos.Add(new SortInfo { Name = item.Replace("asc", "").Trim(), Type = SortType.Asc }); } else if (item.IndexOf("desc") > -1) { model.SortInfos.Add(new SortInfo { Name = item.Replace("desc", "").Trim(), Type = SortType.Desc }); } else { SortType type = SortType.Asc; if (request["sord"] == "desc") { type = SortType.Desc; } model.SortInfos.Add(new SortInfo { Name = item.Trim(), Type = type }); } } } var filters = request["filters"]; if (!string.IsNullOrEmpty(filters)) { JToken token = JToken.Parse(filters); var groupOp = (JValue)token.SelectToken("groupOp"); FilterComposeType composeType = FilterComposeType.And; if ((string)groupOp.Value == "OR") { composeType = FilterComposeType.Or; } var rules = token.SelectToken("rules"); foreach (JToken item in rules) { FilterInfo filterInfo = new FilterInfo(); filterInfo.ComposeType = composeType; var field = (JValue)item.SelectToken("field"); filterInfo.Name = (string)field.Value; var op = (JValue)item.SelectToken("op"); var operateType = (FilterOperateType)Enum.Parse(typeof(FilterOperateType), (string)op.Value, true); filterInfo.OperateType = operateType; var data = item.SelectToken("data"); if (data.Type == JTokenType.Array) { filterInfo.HasMultipleValue = true; foreach (JToken vItem in data.Children()) { filterInfo.Values.Add((string)((JValue)vItem).Value); } } else { filterInfo.Value = (string)((JValue)data).Value; } model.FilterInfos.Add(filterInfo); } } bindingContext.Model = model; return(true); } catch { return(false); } }
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { try { var request = controllerContext.HttpContext.Request; GridQueryModel model = new GridQueryModel(); model.HasFilter = bool.Parse(request["_search"] ?? "false"); model.PageIndex = int.Parse(request["page"] ?? "1"); model.PageSize = int.Parse(request["rows"] ?? "10"); var sidx = request["sidx"]; if (!string.IsNullOrEmpty(sidx)) { model.HasSort = true; var list = sidx.Split(','); foreach (var item in list) { if (item.IndexOf("asc") > -1) { model.SortInfos.Add(new SortInfo { Name = item.Replace("asc", "").Trim(), Type = SortType.Asc }); } else if (item.IndexOf("desc") > -1) { model.SortInfos.Add(new SortInfo { Name = item.Replace("desc", "").Trim(), Type = SortType.Desc }); } else { SortType type = SortType.Asc; if (request["sord"] == "desc") { type = SortType.Desc; } model.SortInfos.Add(new SortInfo { Name = item.Trim(), Type = type }); } } } var filters = request["filters"]; if (!string.IsNullOrEmpty(filters)) { JToken token = JToken.Parse(filters); var groupOp = (JValue)token.SelectToken("groupOp"); FilterComposeType composeType = FilterComposeType.And; if ((string)groupOp.Value == "OR") { composeType = FilterComposeType.Or; } var rules = token.SelectToken("rules"); foreach (JToken item in rules) { FilterInfo filterInfo = new FilterInfo(); filterInfo.ComposeType = composeType; var field = (JValue)item.SelectToken("field"); filterInfo.Name = (string)field.Value; var op = (JValue)item.SelectToken("op"); var operateType = (FilterOperateType)Enum.Parse(typeof(FilterOperateType), (string)op.Value, true); filterInfo.OperateType = operateType; var data = item.SelectToken("data"); if (data.Type == JTokenType.Array) { filterInfo.HasMultipleValue = true; foreach (JToken vItem in data.Children()) { filterInfo.Values.Add((string)((JValue)vItem).Value); } } else { filterInfo.Value = (string)((JValue)data).Value; } model.FilterInfos.Add(filterInfo); } } return(model); } catch { return(null); } }