ASP.NET MVC中的排序,筛选和分页

时间:2010-01-25 12:23:27

标签: c# asp.net-mvc gridview jqgrid asp.net-mvc-routing

实施这些功能的最佳方法是什么?项目的哪个部分会涉及?

我看到了一些JavaScript网格的例子,但我说的是一种最适合MVC架构的通用方法。

我考虑过配置路由和模型来实现这些功能,但我不清楚如果这是实现这些功能的正确方法。一方面,我认为如果我们将逻辑放在路径(item / page / sort /)中,我们就会有书签和避免JavaScript的好处。另一方面,如果我们使用JavaScript网格,我们可以像ASP.NET网络表单中的旧学校网格视图一样行为。

我发现使用HTML帮助程序可能对分页有用,但不知道它们是否适合排序。我查看了jQuery,tableSorterquick search插件,但它们只对当前获取的数据起作用,并且无法帮助实际排序和过滤可能需要触及数据库的内容。我有一些关于使用这些工具与AJAX并行的想法,以获得有用的东西,但我不知道是否在任何地方都做过类似的努力。

我看到的另一种方法是在网络表单上使用动态数据,但我没有找到任何关于集成MVC和DD是否是个好主意的建议。我知道对单个案例实现过滤和排序很简单(虽然它有一些问题,比如使用动态LINQ,这还不是一种标准方法),但创建一个适用于所有情况的排序或过滤工具是我的想法寻找。 (也许这是因为当网络表单开发人员想知道为什么每次我想为不同的实体实现排序方案时我都在编写相同的代码时,我想要手头有东西)。

3 个答案:

答案 0 :(得分:3)

以下是基于jqGrid的解决方案:http://sprokhorenko.blogspot.com/2010/01/jqgrid-mvc-new-version-sources.html

它有点特定于S#arp架构和NHibernate,所以我不确定它是否适合您的需求。但它是模块化的,例如,很容易调整基础存储库实现。

基本上它只是jqGrid及其所有优点和缺点,但已集成到MVC中:

  1. 使用ViewModel
  2. 上的属性控制所有格式和编辑
  3. 自动请求,排序/过滤/分页处理
  4. 自动CRUD处理
  5. 可以处理基于数据库和列表的存储库
  6. 没有可收藏的路线/链接...
  7. 您只需要为ViewModel提供属性并覆盖几个模板CRUD方法(可以只有InternalConstructEntity()。

答案 1 :(得分:0)

你可以查看MVContrib,他们有很好的网格支持。 http://www.codeplex.com/MVCContrib

对于LOB应用程序,Telerik Controls可能是一个很好的解决方案。

答案 2 :(得分:0)

我个人使用jQuery DataTables。它非常简单,并且具有明确定义的服务器端请求。 I've written a plugin for jQuery DataTables with C# and MVC。它使用标准的jQuery DataTables请求并相应地操作IQeryable实例。