MVC3分页,每页项目

时间:2011-08-25 19:07:20

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

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

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

对于服务器端分页,我使用https://github.com/dvsspr/Halaman。 它尚未记录,但它非常灵活,并且使用流畅的配置。

一个非常简单的用例。

@Controller

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

@View

@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>
}

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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

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

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