HowTo:使用MvcContrib.Pagination而不使用MvcContrib.Grid View

rob*_*rdo 3 c# asp.net-mvc pagination

这开始是一个问题,但在我做了一些实验时变成了一个解决方案!所以我想我会和大家分享这个.我的问题是:

如何在不使用MvcContrib.Grid View的情况下使用MvcContrib.Pagination?

我的答案如下......

rob*_*rdo 6

我正在构建一个帮助台票务系统(我是一个C#新手 - 从NerdDinner获得了许多指针),我希望使用某种分页库来帮助查看.我找到了MvcContrib.Pagination,我让它为视图工作.我的观点不使用MvcContrib.Grid,因为它是自定义的.

我的视图List.aspx的缩小版本:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<MyProject.Areas.HelpDesk.Models.hd_Ticket>>" %>
<%@ Import Namespace="MyProject.Areas.HelpDesk.Controllers" %>
<%@ Import Namespace="MvcContrib.Pagination" %>

<h2>Help Desk Tickets (showing <%= Model.Count() %> of <%= ViewData["totalItems"] %>)</h2>     

<% foreach (var item in Model) { %>
    <h3><%= Html.Encode(item.Subject)%></h3>
<% } %>

<p><%= Html.Pager((IPagination)Model)%></p>
Run Code Online (Sandbox Code Playgroud)

我的控制器(部分)TicketController.cs:

TicketRepository ticketRepository = new TicketRepository();

public ActionResult List(int? page, int? pageSize)
{
    IPagination<hd_Ticket> tickets = null;

    int dPageSize = 50;
    int totalItems;

    tickets = ticketRepository.GetTickets().ToList().AsPagination(page ?? 1, pageSize ?? dPageSize);
    ViewData["totalItems"] = tickets.TotalItems;

    return View("List", tickets);
}
Run Code Online (Sandbox Code Playgroud)

我正在使用存储库模式,它将结果返回为IQueryable.以下是TicketRepository.cs文件的一部分:

public class TicketRepository
{
    private HelpDeskDataContext db = new HelpDeskDataContext();

    public IQueryable<hd_Ticket> FindAllTickets()
    {
        return from ticket in db.hd_Tickets
               orderby ticket.CreatedDate descending
               select ticket;
    }
}
Run Code Online (Sandbox Code Playgroud)

所有这些对于某些人来说可能是微不足道的,但如果像我这样的人正在尝试学习C#和ASP.NET MVC以及分页,那么这可能是有用的.我建议新手去做NerdDinner教程:

http://nerddinnerbook.s3.amazonaws.com/Intro.htm

:)

  • 你不应该在AsPagination()之前调用ToList().ToList()构建了查询中所有项目的列表,因此您仍然可以从存储库中获取所有项目,即使稍后您只在页面上显示该项目的子集. (5认同)