asp.net mvcのページネーションの実装を具体的に確認しましたが、実装にはあまり効率的でないものがあると本当に感じています。
すべての実装の最初に、以下のようなページネーション値を使用します。
public ActionResult MostPopulars(int pageIndex,int pageSize)
{
}
私が間違っていると感じることは、pageIndexとpageSizeが完全にPaginationクラスのメンバーでなければならないことです。そうでなければ、この方法は非常に機能的な方法に見えます。また、アプリケーションの階層で不要なパラメーターパスを簡素化します。
2番目は、以下のインターフェイスを使用することです。
public interface IPagedList<T> : IList<T>
{
int PageCount { get; }
int TotalItemCount { get; }
int PageIndex { get; }
int PageNumber { get; }
int PageSize { get; }
bool HasPreviousPage { get; }
bool HasNextPage { get; }
bool IsFirstPage { get; }
bool IsLastPage { get; }
}
ページネーションを別のアクションにルーティングする場合、アクション名またはコントローラー名をカプセル化するための新しいビューモデルを作成する必要があります。別の解決策として、このインターフェイスモデルをビューに送信し、ページャーメソッドでパラメーターとしてハードコードされたアクションとコントローラーを指定しますが、ビューは1つのアクションに厳密に依存しているため、ビューの完全な再利用性が失われています。
別のことは、彼らがビューで以下のコードを使用することです
Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount)
モデルがIPagedListである場合、なぜオーバーロードメソッドを提供しない@Html.Pager(Model)
か、さらに優れたメソッドを提供しないのでしょう@Html.Pager()
。この方法でモデルの種類を知っていることをご存知でしょう。Model.PageNumberの代わりにModel.PageIndexを使用していたため、間違えていました。
もう1つの大きな問題は、IQueryableインターフェイスに強く依存していることです。データ層でIQueryableを使用していることを彼らはどのように知っていますか?私は、ページネーションの実装の永続性を無知に保つコレクションだけで動作することを期待していました。
ページネーションの実装に対する私の改善アイデアの何が問題になっていますか?このようにページネーションを実行しない理由は何ですか?