Beispiel #1
0
            public DataTableColumnOrder GetValue(ModelBindingContext context)
            {
                var modelname = context.ModelName;

                var model = new DataTableColumnOrder();

                if (int.TryParse(DataTableBinderProvider.GetValue(context, $"{ modelname }[column]"), out int columnIndex))
                {
                    model.Column = columnIndex;
                }
                model.Dir = DataTableBinderProvider.GetValue(context, $"{ modelname }[dir]");
                return(model);
            }
        public Task BindModelAsync(ModelBindingContext bindingContext)
        {
            if (bindingContext == null)
            {
                throw new ArgumentNullException(nameof(bindingContext));
            }
            var allValues         = bindingContext.HttpContext.Request.Query;
            DataTableOptions DTOs = new DataTableOptions {
                Draw   = allValues.FirstOrDefault(a => a.Key == "draw").Value,
                Start  = Convert.ToInt32(allValues.FirstOrDefault(a => a.Key == "start").Value),
                Length = Convert.ToInt32(allValues.FirstOrDefault(a => a.Key == "length").Value)
            };

            if (allValues.Any(a => a.Key.Length > 9 && a.Key.Substring(0, 9).Contains("columns")))
            {
                var                   myListIndex         = 0;
                var                   myListIndexComparer = 0;
                var                   allColumns          = allValues.Where(a => a.Key.Length > 9 && a.Key.Substring(0, 9).Contains("columns")).ToList();
                DataTableColumn       DTC  = new DataTableColumn();
                DataTableColumnSearch DTCS = new DataTableColumnSearch();
                DTOs.columns = new List <DataTableColumn>();
                foreach (var column in allColumns)
                {
                    var perColumnArray = column.Key.Split(new char[] { '[', ']' }, StringSplitOptions.RemoveEmptyEntries);
                    var rawIndex       = perColumnArray[1];
                    if (!int.TryParse(rawIndex, out myListIndex))
                    {
                        return(Task.CompletedTask);
                    }
                    if (myListIndexComparer != myListIndex)
                    {
                        DTC.search = DTCS;
                        DTOs.columns.Add(DTC);
                        DTC  = new DataTableColumn();
                        DTCS = new DataTableColumnSearch();
                    }
                    myListIndexComparer = myListIndex;
                    switch (perColumnArray[2])
                    {
                    case "data":
                        DTC.data = column.Value;
                        break;

                    case "name":
                        DTC.name = column.Value;
                        break;

                    case "searchable":
                        DTC.searchable = String.IsNullOrWhiteSpace(column.Value) ? false : Convert.ToBoolean(column.Value);
                        break;

                    case "orderable":
                        DTC.orderable = String.IsNullOrWhiteSpace(column.Value) ? false : Convert.ToBoolean(column.Value);
                        break;

                    case "search":
                        if (perColumnArray[3] == "regex")
                        {
                            DTCS.regex = String.IsNullOrWhiteSpace(column.Value) ? false : Convert.ToBoolean(column.Value);
                        }
                        if (perColumnArray[3] == "value")
                        {
                            DTCS.value = column.Value;
                        }
                        break;
                    }
                    if (allColumns.IndexOf(column) == allColumns.IndexOf(allColumns.Last()))
                    {
                        DTC.search = DTCS;
                        DTOs.columns.Add(DTC);
                    }
                }
            }
            if (allValues.Any(a => a.Key.Length > 7 && a.Key.Substring(0, 7).Contains("order")))
            {
                var myListIndex           = 0;
                var myListIndexComparer   = 0;
                var allOrders             = allValues.Where(a => a.Key.Length > 7 && a.Key.Substring(0, 7).Contains("order")).ToList();
                DataTableColumnOrder DTCO = new DataTableColumnOrder();
                DTOs.order = new List <DataTableColumnOrder>();
                foreach (var order in allOrders)
                {
                    var perColumnArray = order.Key.Split(new char[] { '[', ']' }, StringSplitOptions.RemoveEmptyEntries);
                    var rawIndex       = perColumnArray[1];
                    if (!int.TryParse(rawIndex, out myListIndex))
                    {
                        return(Task.CompletedTask);
                    }
                    if (myListIndexComparer != myListIndex)
                    {
                        DTOs.order.Add(DTCO);
                        DTCO = new DataTableColumnOrder();
                    }
                    myListIndexComparer = myListIndex;
                    switch (perColumnArray[2])
                    {
                    case "column":
                        DTCO.Column = Convert.ToInt32(order.Value);
                        break;

                    case "dir":
                        DTCO.Dir = order.Value;
                        break;
                    }
                    if (allOrders.IndexOf(order) == allOrders.IndexOf(allOrders.Last()))
                    {
                        DTOs.order.Add(DTCO);
                    }
                }
            }
            if (allValues.Any(a => a.Key.Length > 7 && a.Key.Substring(0, 8).Contains("search")))
            {
                var allSearches            = allValues.Where(a => a.Key.Length > 8 && a.Key.Substring(0, 8).Contains("search")).ToList();
                DataTableColumnSearch DTCS = new DataTableColumnSearch();
                DTOs.search = new DataTableColumnSearch();
                foreach (var search in allSearches)
                {
                    var perColumnArray = search.Key.Split(new char[] { '[', ']' }, StringSplitOptions.RemoveEmptyEntries);

                    switch (perColumnArray[1])
                    {
                    case "value":
                        DTCS.value = search.Value;
                        break;

                    case "regex":
                        DTCS.regex = String.IsNullOrWhiteSpace(search.Value) ? false : Convert.ToBoolean(search.Value);
                        break;
                    }
                    if (allSearches.IndexOf(search) == allSearches.IndexOf(allSearches.Last()))
                    {
                        DTOs.search = DTCS;
                    }
                }
            }
            bindingContext.Result = ModelBindingResult.Success(DTOs);
            return(Task.CompletedTask);
        }