例如,此列表包含文档概述和允许分页的需要。 该列表在整个网站中使用。
根据使用它的上下文,它需要来自不同来源的数据。例如,它可以在“组”页面上使用,在该页面上需要加载组的文档。它可以在“事件”页面上使用,它需要加载事件的文档。
这两种情况也可以对包含页面的文档进行不同的过滤。
如果列表没有不同的数据源,我可以轻松使用Html.RenderAction,并从那里开始工作。
但是我是否在调用者的列表中提供文档,或者列表是否应该加载文档,具体取决于filter / paging / ... viewdata?
答案 0 :(得分:0)
您可以将列表实现为部分视图而不是控制器操作。然后,您可以使用RenderPartial渲染列表,并根据列表应显示的内容传入不同的对象列表。
如果你传入IEnumerable作为模型,你可以使用类似Model.Skip(page * pagesize)的东西来实现分页.Take(pagesize)
更新
我们不要在视图中进行分页。创建一个执行分页的模型类可能是一个更好的主意,并且实际上是可测试的,并将其传递到视图中以提供正确的文档页面。当然,视图仍然负责显示页面和链接到其他页面。
您可以创建类似于DocumentPager类的东西,它包装IEnumerable并进行分页。这看起来像这样
public class DocumentPager {
public IEnumerable<MyDocumentObject> DocSource { get; private set; }
public int PageSize { get; private set; }
public DocumentPager(IEnumerable<MyDocumentObject> docSource, int pageSize) {
DocSource = docSource;
PageSize = pageSize;
}
public IEnumerable<MyDocumentObject> GetPage(int pageNumber) {
return DocSource.Skip(..etc).Take(..etc);
}
public int NumPages {
get { return DocSource.Count() / PageSize; }
}
}
然后,您可以将其传递到视图和部分视图中,该视图可以调用GetPage和NumPages方法和属性。
答案 1 :(得分:0)
也许你可以使用ScottGu的PagedList类做些什么,可以在这里找到:http://blog.wekeroad.com/2007/12/10/aspnet-mvc-pagedlistt/