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> |
分类:
asp.net
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· 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