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>

  

jquery easyui datagrid mvc server端分页排序筛选的实现的更多相关文章

  1. jquery easyui datagrid 分页 详解

    前些天用jquery easyui的table easyui-datagrid做分页显示的时候,折腾了很久,后来终于解决了.其实不难,最主要我不是很熟悉前端的东西. table easyui-data ...

  2. jQuery EasyUI datagrid实现本地分页的方法

    http://www.codeweblog.com/jquery-easyui-datagrid%e5%ae%9e%e7%8e%b0%e6%9c%ac%e5%9c%b0%e5%88%86%e9%a1% ...

  3. jquery easyui datagrid使用参考

    jquery easyui datagrid使用参考   创建datagrid 在页面上添加一个div或table标签,然后用jquery获取这个标签,并初始化一个datagrid.代码如下: 页面上 ...

  4. Jquery easyui datagrid 导出Excel

    From:http://www.cnblogs.com/weiqt/articles/4022399.html datagrid的扩展方法,用于将当前的数据生成excel需要的内容. 1 <sc ...

  5. 扩展jquery easyui datagrid编辑单元格

    扩展jquery easyui datagrid编辑单元格 1.随便聊聊 这段时间由于工作上的业务需求,对jquery easyui比较感兴趣,根据比较浅薄的js知识,对jquery easyui中的 ...

  6. Jsp +Js + Jquery + EasyUI + Servlet + Lucene,完成分页

    package loaderman.fy.action; import java.io.IOException; import java.io.PrintWriter; import java.uti ...

  7. jQuery EasyUI DataGrid Checkbox 数据设定与取值

    纯粹做个记录,以免日后忘记该怎么设定. 这一篇将会说明两种使用 jQuery EasyUI DataGrid 的 Checkbox 设定方式,以及在既有数据下将 checked 为 true 的该笔数 ...

  8. jquery easyui datagrid 获取Checked选择行(勾选行)数据

    原文:jquery easyui datagrid 获取Checked选择行(勾选行)数据 getSelected:取得第一个选中行数据,如果没有选中行,则返回 null,否则返回记录. getSel ...

  9. jquery easyui datagrid 加每页合计和总合计

    jquery easyui datagrid 加每页合计和总合计 一:效果图 二:代码实现 这个只有从后台来处理 后台根据rows 和page两个参数返回的datatable 命名为dt 然后根据dt ...

随机推荐

  1. Java-Selenium,获取下拉框中的每个选项的值,并随机选择某个选项

    今天逛51testing,看见有人问这个问题.现在以Select标签为例. 1.首先看页面中的下拉框,如图: 2.F12查看页面源代码,如下 <select class="form-c ...

  2. linux就该这么学,第六天了

    今天学了第六天了,主要讲计划任务了,,at,命令,单次有效,一次性的,crontd服务(周期性)计划任务,crontab -e创建,编辑计划任务.crontab -l查看计划任务,crontaab - ...

  3. Spring 配置文件中 元素 属性 说明

    <beans /> 元素 该元素是根元素.<bean /> 元素的属性 default-init // 是否开启懒加载.默认为 false default-dependency ...

  4. Delphi过程和函数中变量的作用域

    变量的作用域是指变量能被某一子程序识别的范围. 全局变量和局部变量.全局变量是指在程序的type区定义的变量,而局部变量是在过程或函数的定义部分声明的变量.全局变量在整个程序中都有意义,局部变量只在它 ...

  5. linux命令重定向>、>>、 1>、 2>、 1>>、 2>>、 <

    重定向命令其实用得不少吧,只是重来都没有仔细看过,这波正好又用到 又有空总结一波. 先看>和>>: 他们俩其实唯一的区别就是>是重定向到一个文件,>>是追加内容到文 ...

  6. 【微信小程序开发】页面配置

    app下的app.json文件是全局配置. app下的每一个page中,也可以配置.json文件. page中配置的内容是对应app中window配置项下的内容. page中的配置将覆盖window中 ...

  7. 【轻松前端之旅】CSS盒子模型

    盒子模型,也叫框模型,在CSS里是很重要的概念. 每个元素都可以看做一个盒子.盒子包含四个部分:外边距(margin).边框(border).内边距(padding).元素内容(element con ...

  8. 14. The Realities of Telecommuting 远程办公的现状

    14. The Realities of Telecommuting 远程办公的现状 (1) Telecommuting——substituting the computer for the trip ...

  9. jvm参数与GC

    一.JVM的新生代.老年代.与永久代 JVM中的堆,一般分为三大部分:新生代.老年代.永久代: 1.新生代:主要是用来存放新生的对象,一般占据堆的1/3空间.由于频繁创建对象,所以新生代会频繁触发Mi ...

  10. javascript跨域传递消息 / 服务器实时推送总结

    参考文档,下面有转载[非常好的两篇文章]: http://www.cnblogs.com/loveis715/p/4592246.html [跨源的各种方法总结] http://kb.cnblogs. ...