私はさまざまなデータ モデルを持っています。それらをAccount、User、および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 のバインドを呼び出すようにしたいと思います。