无法添加到 IPagedList 对象或将 List<T> 传输到 IPagedList<T>

Nea*_*alR 2 .net c# asp.net-mvc pagedlist asp.net-mvc-3

我正在使用页面列表ASP MVC 插件向我的视图添加分页,因为我的视图模型包含一个有时会有点失控的列表。但是,我遇到了一些问题。

  • 视图模型包含List<T>另一个模型对象的 。如果我对数据库进行一次查询,我可以将此列表的数据类型从List<ZipCodeTerritory>更改为IPagedList<ZipCodeTerritory>,然后只需按照文档从查询中加载列表,如下所示:

查看模型

public IPagedList<ZipCodeTerritory> zipCodeTerritory { get; set; }
Run Code Online (Sandbox Code Playgroud)

控制器

search.zipCodeTerritory = (from z in db.ZipCodeTerritory
                          where z.StateCode.Equals(search.searchState) &&
                                z.EffectiveDate >= effectiveDate
                         select z).ToList().ToPagedList(pageNumber, pageSize);

//This works but this only covers one of the three different searches that are 
//possibly from this Index page
Run Code Online (Sandbox Code Playgroud)
  • 然而,这提出了几个问题。一方面,我无法使用.clearC#使用的方法List。其次,更重要的是,如果我需要执行不同的搜索,在其中多次访问数据库并将每个查询的结果添加到zipCodeTerritory列表中,我将无法调用该.addRange()方法。有谁知道如何将项目添加到IPagedList?

查看模型

public IPagedList<ZipCodeTerritory> zipCodeTerritory { get; set; }
Run Code Online (Sandbox Code Playgroud)

控制器

foreach (var zip in zipArray)
{
    var item = from   z in db.ZipCodeTerritory
                where  z.ZipCode.Equals(zip) &&
                        z.EffectiveDate >= effectiveDate &&
                        z.IndDistrnId.Equals(search.searchTerritory) &&
                        z.StateCode.Equals(search.searchState)
                select z;
    search.zipCodeTerritory.AddRange(item); //This line throws the following exception:

    //PagedList.IPagedList<Monet.Models.ZipCodeTerritory>' does not contain a 
    //definition for 'AddRange' and no extension method 'AddRange' accepting a first 
    //argument of type 'PagedList.IPagedList<Monet.Models.ZipCodeTerritory>' could be 
    //found (are you missing a using directive or an assembly reference?)
} 
Run Code Online (Sandbox Code Playgroud)
  • 我还尝试在添加分页之前简单地保留代码,然后尝试将其List<T>转换为IPagedList<T>对象,但这也不起作用。这种方法可以解决我上面的所有问题,所以如果有人知道如何简单地将 a 转换List为,IPagedList那将不胜感激。

查看模型

    public IPagedList<ZipCodeTerritory> pagedTerritoryList { get; set; }
    public List<ZipCodeTerritory> zipCodeTerritory { get; set; }
Run Code Online (Sandbox Code Playgroud)

控制器

search.pagedTerritoryList = (IPagedList<ZipCodeTerritory>)search.zipCodeTerritory;

//This threw the following exception at runtime: 
//Unable to cast object of type  
//System.Collections.Generic.List'1[Monet.Models.ZipCodeTerritory]' to type 
//'PagedList.IPagedList'1[Monet.Models.ZipCodeTerritory]'.
Run Code Online (Sandbox Code Playgroud)

Gal*_*boy 5

要将您的各种方法结合在一起,您可能应该执行以下操作(基于您的第一个示例):

var mySearch = (from z in db.ZipCodeTerritory
                      where z.StateCode.Equals(search.searchState) &&
                            z.EffectiveDate >= effectiveDate
                     select z);

// Other searches, whatever; use mySearch.AddRange() here

search.zipCodeTerritory = mySearch.ToPagedList(pageNumber, pageSize);
Run Code Online (Sandbox Code Playgroud)