0

たとえば、このリストにはドキュメントの概要が含まれており、ページングを許可する必要があります。このリストは、Web サイト全体で使用されます。

使用されるコンテキストに応じて、別のソースからのデータが必要になります。たとえば、グループのドキュメントをロードする必要がある「グループ」ページで使用できます。また、イベントのドキュメントをロードする必要がある「イベント」ページで使用できます。

どちらの状況でも、ページ内のドキュメントに対して異なるフィルタリングを行うことができます。

リストに別のデータソースが含まれていなければ、Html.RenderAction を簡単に使用して、そこから作業を開始できます。

しかし、フィルター/ページング/...ビューデータに応じて、呼び出し元でリストにドキュメントを提供するか、リストにドキュメントをロードする必要がありますか?

4

2 に答える 2

1

コントローラー アクションではなく、部分ビューとしてリストを実装できます。次に、RenderPartial を使用してリストをレンダリングし、リストの表示内容に応じて異なるオブジェクトのリストを渡すことができます。

たとえば、IEnumerable をモデルとして渡すと、Model.Skip(page * pagesize).Take(pagesize) のようなものを使用してページングを実装できます。

更新しました

ビューでページングを行わないようにしましょう。ページングを実行し、実際にテスト可能なモデル クラスを作成し、それをビューに渡してドキュメントの適切なページを提供することをお勧めします。もちろん、ビューは引き続きページの表示と他のページへのリンクを担当します。

IEnumerable をラップしてページングを行う DocumentPager クラスのようなものを作成できます。これは次のようになります

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 メソッドとプロパティを呼び出すことができる部分ビューに渡すことができます。

于 2010-07-08T10:12:28.623 に答える
0

たぶん、ここで見つけることができるScottGuのPagedListクラスで何かをすることができます:http ://blog.wekeroad.com/2007/12/10/aspnet-mvc-pagedlistt/

于 2010-07-08T11:26:39.350 に答える