jquery easyui datagrid mvc server端分页排序筛选的实现

1自定义一个ModelBinder

 public class filterRule
    {
        public string field { get; set; }
        public string op { get; set; }
        public string value { get; set; }
    }
    public class dataGridFilter
    {
        public dataGridFilter()
        {
            filterRules = new HashSet<filterRule>();
        }
        public int page { get; set; }
        public int rows { get; set; }
        public string sort { get; set; }
        public string order { get; set; }
        public IEnumerable<filterRule> filterRules { get; set; }
    }

    public class DataGridFilterBinderProvider : IModelBinder
    {
        public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            if (controllerContext == null)
                throw new ArgumentNullException("controllerContext", "controllerContext is null.");
            if (bindingContext == null)
                throw new ArgumentNullException("bindingContext", "bindingContext is null.");
            if (bindingContext.ModelType == typeof(dataGridFilter))
            {
                HttpRequestBase request = controllerContext.HttpContext.Request;
                dataGridFilter filter = new dataGridFilter();
                if (request.HttpMethod == "GET")
                {
                    filter.order = request.QueryString["order"];
                    filter.page = Convert.ToInt32(request.QueryString["page"]);
                    filter.rows = Convert.ToInt32(request.QueryString["rows"]);
                    filter.sort = request.QueryString["sort"];
                    var filterRules = request.QueryString["filterRules"];
                    if (!string.IsNullOrEmpty(filterRules))
                    {
                        var rules = JsonConvert.DeserializeObject<IEnumerable<filterRule>>(filterRules);
                        filter.filterRules = rules;

                    }
                        
                   
                    return filter;
                }
                else {
                    filter.order = request.Form["order"];
                    filter.page = Convert.ToInt32(request.Form["page"]);
                    filter.rows = Convert.ToInt32(request.Form["rows"]);
                    filter.sort = request.Form["sort"];
                    var filterRules = request.Form["filterRules"];
                    if (!string.IsNullOrEmpty(filterRules))
                    {
                        var rules = JsonConvert.DeserializeObject<IEnumerable<filterRule>>(filterRules);
                        filter.filterRules = rules;

                    }
                        
                   
                    return filter;
                }

                
            }
           else
            {
                return BindModel(controllerContext, bindingContext);
            }
        }
        
        private Nullable<T> TryGet<T>(ModelBindingContext bindingContext, string key) where T : struct
        {
            if (String.IsNullOrEmpty(key))
                return null;

            ValueProviderResult valueResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName + "." + key);
            if (valueResult == null && bindingContext.FallbackToEmptyPrefix == true)
                valueResult = bindingContext.ValueProvider.GetValue(key);

            bindingContext.ModelState.SetModelValue(bindingContext.ModelName, valueResult);

            if (valueResult == null)
                return null;

            try
            {
                return (Nullable<T>)valueResult.ConvertTo(typeof(T));
            }
            catch (Exception ex)
            {
                bindingContext.ModelState.AddModelError(bindingContext.ModelName, ex);
                return null;
            }
        }
    }

  controller代码

 public ActionResult Get([ModelBinder(typeof(DataGridFilterBinderProvider))]dataGridFilter request)
        {
            //var filter = JsonConvert.DeserializeObject<IEnumerable< filterRule>>(filterRules);
            //int page = 1; int rows = 10; string sort = "Id"; string order = "asc"; ; IEnumerable<filterRules> filterRules = null;
            int count = products.Count();
            //var query = products.OrderBy(string.Format("{0} {1}", sort, order)).Skip((page-1)*rows).Take(rows);
            var query = products.OrderBy(string.Format("{0} {1}", request.sort, request.order)).Skip((request.page - 1) * request.rows).Take(request.rows);

            return Json(new { total = count, rows = query }, JsonRequestBehavior.AllowGet);

        }

  html代码

<script type="text/javascript">

    $(function () {
        $('#grid').datagrid({
            title: 'Product--100',
            url: '/Home/Get',
            method:'post',
            width: '100%',
            height: 'auto',
            rownumbers: true,
            sortName: 'Id',
            SortOrder: 'asc',
            columns: [[
                { field: 'Id', title: 'Id', sortable: true },
                { field: 'Name', title: 'Name', sortable: true },
                { field: 'Unit', title: 'Unit', sortable: true },
                { field: 'Price', title: 'Price', sortable: true }
            ]],
            pagination: true,
            pagePosition: 'bottom',
            pageSize: 10,
            enableFilter:true,
            remoteFilter:true
        }).datagrid('enableFilter');
 

    })

</script>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术之路

动态生成TreeView方法(一)

一般情况下生成TreeView我们用的是用递归不建议用递归数据量大了会慢, 小弟今天用SortedList集合实现一下没有技术含量,一看代码大家就会明白。个人也...

20060
来自专栏跟着阿笨一起玩NET

C#中格式化数据的输出

alignment:可选,是一个带符号的整数,指示首选的格式化字段宽度。如果“对齐”值小于格式化字符串的长度,“对齐”会被忽略,并且使用格式化字符串的长度作为字...

13500
来自专栏菩提树下的杨过

温故而知新:类索引器

类索引器  1 using System;  2 using System.Collections.Generic;  3  4 namespace Pro...

225100
来自专栏菩提树下的杨过

泛型List<T>使用示例

代码来源于"c#高级编程(第4版)",略作修改 using System; using System.Collections; using System.C...

20070
来自专栏飞扬的花生

c#枚举的描述和值

13830
来自专栏跟着阿笨一起玩NET

c# 播放mp3

转载:http://www.cnblogs.com/igrl/archive/2010/03/29/1699975.html

1.2K10
来自专栏c#开发者

lightswitch 添加 TreeView 控件

代码片段 <UserControl xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presen...

33270
来自专栏源哥的专栏

js中将日期类型转换成字符串型格式

27810
来自专栏菩提树下的杨过

(Head First 设计模式)学习笔记(1)

把书中开篇duck问题的代码翻译成了c#版: 概述: 某游戏公司要设计一款鸭子的游戏,里面有各种各样的鸭子,有些会飞,有些会叫,但都会游泳。而且不同种类的鸭子...

21990
来自专栏菩提树下的杨过

DataTable,List去重复记录的方法

今天一位朋友问如何去掉DataTable里重复的记录(DataTable是别人返回过来的,不能再重新查询数据库,所以无法用sql中的select distinc...

322100

扫码关注云+社区

领取腾讯云代金券