1

私はさまざまなデータ モデルを持っています。それらをAccountUser、およびOrderと呼びましょう。(最終的にはもっとたくさんあります。)

Account オブジェクト、User オブジェクト、または Order オブジェクトのリストを表示するビューがあります。各ビューでは、検索基準 (各基準はオブジェクトに固有) に基づいてこれらのオブジェクトをフィルタリングできます。

すべてのアクション モデルに何らかのページ パラメータを含める必要がないように、ページのビュー モデルのみを使用してページングを実装する最良の方法は何ですか? 私の目標は、ページ ビュー モデルのページ ビュー プロパティとの間でページング情報を取得することです。

注:これが私がこれにアプローチし始めた方法です:

一般的なビュー モデル:

public ListViewModel<T> {
    public List<T> Models {get;set;}
    public PageRange PageRange {get;set;}
}

各ビューには、次のようなビュー モデルがあります。

public AccountListViewModel : ListViewModel<Account> { }

各ビュー モデルには、(明らかに) ビューに役立つ要素が含まれています。これには、フィルター処理のためにコントローラーに戻される可能性のある基準が含まれます。したがって、リスト アクションは次のようになります。

public ActionResult List(AccountListViewModel viewModel) {
    var accounts = /* retrieve data based on properties of view model */

    var trimmedAccounts = /* skip and take elements from accounts object based on viewModel.PageRange */
    accounts.Models = trimmedAccounts
    return View(viewModel);
}

これは、適切にバインドするために、クエリ文字列に "PageRange.PageStart=#" (# は整数) を含める必要があることを除いて機能します。クエリ文字列で「start =」を検出し、それをビューモデルに接続した場合、MVC が PageRange のバインドを呼び出すようにしたいと思います。

4

0 に答える 0