使用 ASP.Net MVC 对网格进行分页和排序
Posted
技术标签:
【中文标题】使用 ASP.Net MVC 对网格进行分页和排序【英文标题】:Paging & Sorting grids with ASP.Net MVC 【发布时间】:2010-10-04 12:46:45 【问题描述】:我是 MVC 的新手,并没有遵循您在网格上进行分页和排序的方式。我习惯于将 asp.Net GridView 控件与指向我们业务层中对象的 ObjectDataSource 一起使用 - 在这种情况下,ODS 使用我们的 ORM 在对象上生成的方法处理所有分页和排序。
我已经研究过将相同的 ORM 与 MVC 一起使用 - 那里一切正常 - 我只是循环遍历集合以在页面上构建表格 - 但没有 ODS 来处理分页和排序,我是对我将如何处理感到困惑。我会有一个单独的控制器来进行分页和排序吗?
我知道我需要自己动手 - 但我该从哪里开始呢?我创建了一个 CustomerController,以及一个显示如下所示客户表的视图 - 我想对 FirstName 或 LastName 列进行排序。我的模型上有一个 Sort() 方法,它将采用 GridView/ODS 对使用的格式的字符串排序表达式。我会在我的 CustomerController 上创建一个名为 Sort 的新 Action,并在我的标题中放置一个 ActionLink 吗?
<table>
<tr>
<th>
First Name
</th>
<th>
Last Name
</th>
</tr>
<% foreach (var item in Model)
%>
<tr>
<td>
<%= html.Encode(item.FirstName) %>
</td>
<td>
<%= Html.Encode(item.LastName) %>
</td>
</tr>
<% %>
</table>
【问题讨论】:
【参考方案1】:现在 MVC 3 现在有一个开箱即用的 webGrid。我知道这个问题是不久前提出的,但是在寻找有关 webGrid 的内容时,我最终想到了它。所以我认为它应该有一个提到新 webGrid 的答案。
这里有一些关于如何使用它的好帖子:
http://www.dotnetcurry.com/ShowArticle.aspx?ID=615
http://cnug.co.in/blogs/shijuv/archive/2010/10/08/using-the-webgrid-helper-in-asp-net-mvc-3-beta.aspx
http://www.nickharris.net/tag/webgrid/
它支持排序、分页和一些 Ajax 的东西。它已经可以为您做很多事情,但您也可以单独指定每个单独的列。
更新: 还有许多可用的 javascript 库可以为您完成表格。我个人喜欢使用DataTables。您可以为它提供一个在服务器上生成的现有 html 表,或者给它一个端点,它可以检索数据(全部或仅一页)。
还有更多,只需 Google 一下。
【讨论】:
强大的开箱即用功能,随 MVC 3 一起提供,使用简单。喜欢它! 这是 MSDN 上的另一个好帖子,其中包含更多细节:msdn.microsoft.com/en-us/magazine/hh288075.aspx【参考方案2】:您可以使用相同的控制器,只需添加一个附加参数并将其命名为排序。然后在控制器中检查 sort 有什么值,并根据该参数对数据进行排序。
或者如果你想在客户端做事,你可以使用类似tablesorter,一个jquery插件。
【讨论】:
【参考方案3】:使用 MVC,您必须自己进行排序、分页等操作。我建议您使用 YUI DataTable 或其他一些 JavaScript 网格。
此外,如果您发现自己在做繁重的数据网格工作,您可能想看看 ASP.NET 动态数据,它专为这些类型的 ORM 交互而设计。
【讨论】:
我目前正在走 MVC/Dynamic Data 混合应用程序的路线:非管理页面的 mvc 内容和管理页面的 DD。【参考方案4】:首先使用jQuery。 jQuery 是你的朋友。 然后为 jQuery jqGrid 使用这个很棒而且可能是最好的 Grid 控件。
在您的 CustomerController 中创建一个名为 CustomerData 的操作。所有与 Grid 的交互都应该指向这个动作。
转到here 获取有关如何使用 jqGrid 的大量示例。
【讨论】:
jqGrid 依赖于 javascript。如果你需要 JavaScript 独立性怎么办? 那么您需要自己构建表格。我已经构建了一个分页类和一个用户控件,您可以根据需要使用。 对于大多数开发者来说,JavaScript 是一个合理的要求。 在任何情况下在客户端排序都是可怕的。为服务器端分页开发良好的可重用代码【参考方案5】:我们一直在使用来自JqWidgets 的客户端控件 JqxGrid,并且对它与大量记录相关的性能以及内置的分页、过滤、排序非常满意。 Here 是在 ASP.Net MVC 中绑定它的示例
【讨论】:
请提供一些具体细节,说明如何使用这些控件来修复特定场景 - 谢谢以上是关于使用 ASP.Net MVC 对网格进行分页和排序的主要内容,如果未能解决你的问题,请参考以下文章