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>
    

      

  • 相关阅读:
    iframe的两种通信方式,iframe的history的优先级
    React-router 将弹框Modal嵌入路由(create a modal route with react-router)
    vue 项目构建 + webpack
    vue 生命周期,v-bind 和 v-on的区别(或 : 和 @的区别),以及父传子、子传父的值传递方式
    linux上配置Sonar代码扫描
    玩转jenkins
    程序小猿的rpa----艺赛旗阶段
    学习完level3加入了uipath家庭,欢迎交流学习。小清风的rpa
    程序员小时光的rpa成长之路(艺赛旗)
    数学期望
  • 原文地址:https://www.cnblogs.com/neozhu/p/4695257.html
Copyright © 2011-2022 走看看