zoukankan      html  css  js  c++  java
  • 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',
                 '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>
    

      

  • 相关阅读:
    连接Excel文件时,未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
    C# 中LinkLabel的简单使用
    体验安装金蝶K/3 Wise 13.0(图像)
    VS2008让自己掌控的定义编译项目后,自己主动添加到工具箱
    哥哥牟:由于道路的明星莫属,它救了我的女儿!
    【SSH之旅】一步学习的步Struts1相框(三):分析控制Struts1示例
    Ubuntu14.04 工作区设置
    Android定调的发展
    Spark1.0.0 学习路径
    oracle 11g 基于磁盘的备份rman duplicate
  • 原文地址:https://www.cnblogs.com/neozhu/p/4695257.html
Copyright © 2011-2022 走看看