如何从十行表中的模型中分页数据?

时间:2013-08-13 14:17:49

标签: asp.net-mvc-4 pagination

我从数据库中获取了大量行。每行与模型的对象相关联。所以现在,感谢一个强类型的视图,我正在传递一个像这样的对象列表:

 public PartialViewResult ListerIncidentsHotline()
    {
        int NumDossier = StructureData.DonneNumDossier((string)Session["Utilisateur"], (string)Session["MotDePasse"]);
        List<IncidentHotline> ListeIncidents = StructureData.DonneIncidentsHotline(NumDossier, 10);
        int NbreIncidents = StructureData.DonneNombreIncidents(NumDossier);
        ViewBag.NombreIncidents = NbreIncidents;
        return this.PartialView(ListeIncidents);
    }

所以在视图中我正在显示一个包含如下数据的表:

 <table id="tabIncident" class="table table-striped">
    <th>IdIncident</th><th>Libelle</th><th>Motif</th><th>Nom du responsable</th><th>Date de création</th><th>Date de clôture</th>
    @foreach (var Incident in Model)
    {  
        <tr><td>@Incident.IdIncident</td><td>@Incident.LibelleIncident</td><td>@Incident.MotifIncident</td><td>@Incident.NomResponsable</td><td>@Incident.DateCreation</td><td>@Incident.DateCloture</td></tr>
    }
</table>

但是现在我想让juste在表格中显示其中的10行,然后通过点击按钮,显示下面的10行。有人有想法吗?

2 个答案:

答案 0 :(得分:0)

您的功能可能如下所示:

public PartialViewResult ListerIncidentsHotline(int page = 1)

使用局部视图进行分页会有点棘手。基本上您的父视图还需要有一个页码参数,并且需要将该信息传递给局部视图。

然后你可能想要改变你的模型。现在,您的模型本身就是您的域模型的IEnumerable。您需要一个包含此IEnumerable的模型,但也包含分页信息,例如总页数和当前页面。

所以你的模型看起来像是:

public class IncidentPageInfo
{
    public int NumPages { get; set; }
    public int CurrentPage { get; set; }
    public int PageSize { get; set; }
    public IEnumerable<Incident> Incidents { get; set; }
}

然后在返回视图时,您将此对象作为模型传递,您将填充页面,如下所示:

public PartialViewResult ListerIncidentsHotline(int page = 1)
{
    // other code

    const int PageSize = 10;

    IEnumerable<Incident> incidents; // this is returned from your data persistence.  IQueryable is preferred to IEnumerable

    var viewModel = new IncidentPageInfo()
    {
        NumPages = (int)Math.Ceiling((double)incidents.Count() / PageSize),
        CurrentPage = page,
        PageSize = PageSize,
        Incidents = incidents.Skip((page - 1) * PageSize).Take(PageSize),
    };

    return PartialView(viewModel);
}

答案 1 :(得分:0)

水手主义的方式就是使用分页库。 Nuget中有很多,但最受欢迎的似乎是PagedList。阅读here如何实施。