我必须实现分页,每页的项目数和我的MVC3应用程序的排序。 在我的视图页面中,我有一个来自模型的项目列表。我将在每个页面内显示每个div内的一些项目(由用户定义)。我不是在建桌子。
我知道mvccontrib可以使用分页构建一个表,并且不确定该分页是否可以设置样式,因为我必须设置样式。解决这个问题的好方法是什么?
答案 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数据源,那么您需要来回传递分页属性,因此可以在服务器端有效地完成分页(取决于您的数据库后端)。