首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >jquery easyui datagrid mvc server端分页排序筛选的实现

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

作者头像
阿新
发布2018-04-12 10:38:55
1.1K0
发布2018-04-12 10:38:55
举报
文章被收录于专栏:c#开发者c#开发者

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>
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-08-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档