使用 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 对网格进行分页和排序的主要内容,如果未能解决你的问题,请参考以下文章

从右到左 GridView For Asp.net MVC

在 asp.net MVC 中对表进行排序

ASP.Net MVC Kendo Grid 的自定义分页

jQuery Grid With ASP.Net MVC

ASP.Net MVC4排序检索分页的实现

ExtJs - 基于远程数据的分页和缓冲网格,没有远程分页和过滤