Многоразовый список страниц в ASP.NET MVC2 - PullRequest
0 голосов
/ 08 июля 2010

Например, этот список содержит обзор документов и требует разрешения подкачки.Список используется по всему сайту.

В зависимости от контекста, в котором он используется, ему нужны данные из другого источника.Например, его можно использовать на странице «группа», где необходимо загрузить документы для группы.И его можно использовать на странице «событие», где необходимо загрузить документы для события.

Обе ситуации могут также по-разному фильтровать документы на странице.

Следуетсписок не имеет разных источников данных, я мог бы легко использовать Html.RenderAction и начать работать оттуда.

Но нужно ли предоставлять список с документами в вызывающей программе или список загружается в зависимости от фильтра/ paging / ... viewdata?

Ответы [ 2 ]

0 голосов
/ 08 июля 2010

Может быть, вы можете что-то сделать с классом ScagedGu PagedList, который можно найти здесь: http://blog.wekeroad.com/2007/12/10/aspnet-mvc-pagedlistt/

0 голосов
/ 08 июля 2010

Вы можете реализовать список как частичное представление вместо действия контроллера. Затем вы можете использовать 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.

...