【问题标题】:MVC3 Pagination, items per pageMVC3分页,每页项目
【发布时间】:2011-08-25 19:07:19
【问题描述】:

我必须为我的 MVC3 应用程序实现分页、每页项目数和排序。 在我的视图页面中,我有一个来自模型的项目列表。我将在每个页面的每个 div 中显示一些项目(由用户定义)。我不是在建表。

我知道 mvccontrib 可以构建一个带有分页的表,但不确定该分页是否可以设置样式,因为我必须设置我的样式。解决这个问题的好方法是什么?

【问题讨论】:

  • 是在客户端还是服务器端分页数据?
  • jqGrid 或 Knockout.js 获胜...
  • @ShaneC:我会提到 ExtJs,因为我们谈论的是重量级人物。 :)
  • 我想我需要一个 js 组件,因为我从模型中获得的 List 已经包含所有记录。我需要一些我可以设计的东西,因为它不是我正在构建的网格,而是几个并排的 div。谢谢。
  • 有什么东西可以让过滤和分页一起使用吗?谢谢!

标签: asp.net-mvc asp.net-mvc-3 pagination


【解决方案1】:

查看PagedList (available as a nuget package)。到目前为止,我发现它对 mvc 非常友好。

【讨论】:

    【解决方案2】:

    对于服务器端分页,我使用https://github.com/dvsspr/Halaman。 它还没有文档化,但它非常灵活并且使用流畅的配置。

    为您提供一个非常简单的用例。

    @控制器

    public ActionResult Index(AdminPageInfo page, SortInfo sort)
    {
        PagedData<Account> model = accountRepository.Get().AsPagedData(page, sort);
        return (model.IsValid) ? View(model) : View("_Error");
    }
    

    @查看

    @model PagedData<Account>
    @{
        ViewBag.Title = "Account Index";
    }
    <p>
        Total records: <strong>@Model.TotalRows</strong>
        <br />
        Total pages: <strong>@Model.TotalPages</strong>
        <br />
        Total records in current page: <strong>@Model.TotalRowsInPage</strong>
    </p>
    @Html.Pager(Model)
    @Html.Sizer(Model) @* Page size changer helper =) *@
    @*
    Put a dot after the closing brace and you will see the available options.
    *@
    
    <h3>Sorter</h3>
    <li>
        <ul>@(Html.SortLink<Account>(zz => zz.Id, Model, "User Id"))</ul>
        <ul>@(Html.SortLink<Account>(zz => zz.UserName, Model, "User Name"))</ul>
        <ul>@(Html.SortLink<Account>(zz => zz.FullName, Model, "Full Name"))</ul>
    </li>
    @foreach (var acc in Model) {
        <p>
            User name: @acc.UserName
            <br />
            Full name: @acc.FullName 
        </p>
    }
    

    就是这样。 恕我直言,代码库很容易被黑客入侵——以防万一你想实现混合分页。

    【讨论】:

      【解决方案3】:

      使用纯 HTML,您可以使用 WebMatrix 中的 Webgrid 帮助。它具有开箱即用的 MVC 分页支持。

      http://msdn.microsoft.com/en-gb/magazine/hh288075.aspx

      否则,任何主要的 Javascript 组件(jqgrid、extjs 等)都可以进行分页,这一切都取决于您的模型源是什么。如果您实现 AJAX 数据源,则需要来回传递分页属性,以便可以在服务器端有效地完成分页(取决于您的数据库后端)。

      【讨论】:

        【解决方案4】:

        如果您正在寻找一个主要是客户端的解决方案,我从来没有遇到过带有 Paginator 插件的 jQuery 的 Tablesorter 的任何问题:http://tablesorter.com/docs/example-pager.html

        如果您想在服务器端执行此操作,一般方法是您将缓存整个结果集服务器端*,然后对服务器进行(ajax 或其他)调用,指定需要哪些记录。您将传递一个起始索引和许多记录,以通过查询字符串或表单字段返回(以及查询的一些标识符,以确保您获得正确的结果集)。

        *正如 mrjoltcola 在 cmets 中指出的那样,缓存或不缓存是一个个案问题,对于较大的结果集,使用较小的结果集进行更多的 db 调用可能更有意义。大结果集问题的另一种解决方案是限制他们的结果集大小并显示一条消息,建议他们在超过阈值时使他们的查询更加具体。我建议您一开始就做出最好的判断并优化如果需要

        【讨论】:

        • 一切都很好,除了缓存。我们通常只是将页面范围重复传递给数据库,因此查询在其限制子句(LIMIT,ROWNUM)中使用它。一些结果集太大而无法缓存,即使结果集很小,缓存也可能对大用户群造成麻烦。但仍然是一个好点,因为有些应用程序实际上需要在第一次运行查询时对结果集进行分页。然后缓存成为一项要求。
        猜你喜欢
        • 2013-06-21
        • 2018-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-04
        • 1970-01-01
        • 2017-08-05
        • 2020-08-19
        相关资源
        最近更新 更多