【发布时间】:2013-10-08 17:09:28
【问题描述】:
我正在使用Page List ASP MVC 插件向我的视图添加分页,因为我的视图模型包含一个有时会有点失控的列表。但是,我遇到了一些问题。
- 视图模型包含另一个模型对象的
List<T>。如果我对数据库进行一次查询,我可以将此列表的数据类型从List<ZipCodeTerritory>更改为IPagedList<ZipCodeTerritory>,然后只需按照文档从查询中加载列表,如下所示:
查看模型
public IPagedList<ZipCodeTerritory> zipCodeTerritory { get; set; }
控制器
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
- 但是,这会带来一些问题。一方面,我无法使用 C#
List使用的.clear方法。其次,更重要的是,如果我需要执行不同的搜索,在其中多次访问数据库并将每个查询的结果添加到zipCodeTerritory列表中,我无法调用.addRange()方法。有谁知道如何向IPagedList添加项目?
查看模型
public IPagedList<ZipCodeTerritory> zipCodeTerritory { get; set; }
控制器
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?)
}
- 我还尝试简单地保留添加分页之前的代码,然后尝试将
List<T>转换为IPagedList<T>对象,但这也不起作用。这种方法将解决我上述所有问题,所以如果有人知道如何简单地将List转换为IPagedList,将不胜感激。
查看模型
public IPagedList<ZipCodeTerritory> pagedTerritoryList { get; set; }
public List<ZipCodeTerritory> zipCodeTerritory { get; set; }
控制器
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]'.
【问题讨论】:
-
你有什么问题?
-
查询数据时,是否要从第0页重新开始?如果是这样,为什么不使用第一步中概述的方法将其放入
List<T>(如果需要,包括附加),然后在最后调用.ToPagedList()? -
@msmucker0527:想知道是否有人知道如何将项目添加到
IPagedList或将通用List转换为IPagedList -
@GalacticCowboy:问题在于我在另一个搜索中,我需要将项目添加到
IPagedList,而IPagedList没有.addRange()方法或任何其他方法我发现的方式是逐步向其中添加项目。 -
@NealR - 对,在完成之前不要将其转换为 IPagedList。为您的 List 创建一个本地临时变量,将其 AddRange() 添加到您想要的内容,然后在您准备好时创建 ToPagedList()。
标签: c# .net asp.net-mvc asp.net-mvc-3 pagedlist