PagedList - 一种不使用整个集合的方法

时间:2014-11-28 13:03:52

标签: asp.net-mvc pagedlist

我做了一个简单的操作,我向Web服务请求获取LIST<>特定群体的文章。

然后使用pagedList(并指定所需的页面和页码)当然我指定了我想要的列表的子集。问题是:特定组的文章可以是千例 - 从Web服务获取所有这些信息需要花费大量时间甚至有时粉碎(当文章超过1000时)

有没有办法只为特定页面获取文章,仍然使用pagedList,因为我看到不幸的是我们必须为整个集合调用ToPagedList方法。

public virtual ActionResult ImportShow(String id, int? menuID, string articlegroupID, string menuforHistory,int? counter,int?page,int? pageSize,string articleDescr, int?  ArticleID)
        {



                List<WebServiceBeaMenu> standartList = ebServiceBea.GetArticle(Convert.ToInt32(menuID), articlegroupID, "", articleDescr);
                IPagedList<WebServiceBeaMenu> p_ProductsShow = standartList.ToPagedList(actualpage,actualPageSize);

                p_GroupMenu.ProductMenu = p_ProductsShow;
                p_GroupMenu.MenuHistory = p_GetMenuHistory.ToList();
                p_GroupMenu.MenuLeft = p_GetMenuLeft.ToList();
                return PartialView("ImportShow", p_GroupMenu);                 
            }
        }

这是我的观点

@model  MvcBeaWeb.GroupMenu



        @for (int i = 0; i < Model.ProductMenu.Count; i++)
        {

        <div>
            var item = Model.ProductMenu[i];



            @Html.PagedListPager(Model.ProductMenu, page => Url.Action("ImportShow", new { id = Model.LanguageName, menuID = @Session["men"], articlegroupID = Session["article"], articleDescr = Session["articleDescr"], pageSize = Session["pageSize"], page }))

    </div>

1 个答案:

答案 0 :(得分:1)

如果您有权访问WebService,则应该重写.GetArticle()或者将其替换为.GetPagedArticle()之类的问题。这个methid应该有所有的分页参数。这是我想的唯一方式。 您的.GetArticle()方法应返回如下对象:

public class Set<T>
{
    public Set()
    {
        Elements = new List<T>();
    }

    public Set(List<T> elements, int rowsAll)
    {
        Elements = elements;
        RowsAll = rowsAll;
    }

    public Set(List<T> elements, int rowsOnPage, int pageSelected, int rowsAll)
    {
        Elements = elements;
        PageSelected = pageSelected;
        RowsOnPage = rowsOnPage;
        RowsAll = rowsAll;
        PagesAll = (rowsAll % RowsOnPage == 0) ? rowsAll / RowsOnPage : rowsAll / RowsOnPage + 1; ;
    }
    public int RowsOnPage { get; set; }
    public List<T> Elements { get; set; }
    public int? RowsAll { get; set; }
    public int PageSelected { get; set; }
    public int PagesAll { get; set; }
}

Elements应该不是所有元素,而只是分页。