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

1自定义一个ModelBinder

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
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代码

1
2
3
4
5
6
7
8
9
10
11
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代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<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>

  

 

posted @   阿新  阅读(963)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示