Saya telah memeriksa implementasi pagination pada asp.net mvc secara khusus dan saya benar-benar merasa ada sesuatu yang kurang efisien dalam implementasinya.
Pertama-tama implementasi menggunakan nilai pagination seperti di bawah ini.
public ActionResult MostPopulars(int pageIndex,int pageSize)
{
}
Hal yang saya rasa salah adalah pageIndex dan pageSize benar-benar harus menjadi anggota kelas Pagination kalau tidak cara ini terlihat sangat fungsional. Juga menyederhanakan lulus paramater yang tidak perlu di tingkatan aplikasi.
Hal kedua adalah mereka menggunakan antarmuka di bawah ini.
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; }
}
Jika saya ingin merutekan pagination ke tindakan yang berbeda, maka saya harus membuat model tampilan baru untuk mengenkapsulasi nama tindakan di dalamnya atau bahkan nama pengontrol. Solusi lain dapat mengirimkan model ini untuk melihat kemudian menentukan tindakan dan pengontrol hard coded dalam metode pager sebagai parameter tetapi saya kehilangan sepenuhnya re-usability dari pandangan saya karena sangat tergantung hanya pada satu tindakan.
Hal lain adalah mereka menggunakan kode di bawah ini dalam tampilan
Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount)
Jika modelnya adalah IPagedList, mengapa mereka tidak menyediakan metode overload seperti @Html.Pager(Model)
atau bahkan lebih baik @Html.Pager()
. Anda tahu bahwa kita tahu tipe model dengan cara ini. Sebelum saya melakukan kesalahan karena saya menggunakan Model.PageIndex, bukan Model.PageNumber.
Masalah besar lainnya adalah mereka sangat bergantung pada antarmuka IQueryable. Bagaimana mereka tahu bahwa saya menggunakan IQueryable di lapisan data saya? Saya berharap bahwa mereka bekerja hanya dengan koleksi yang membuat implementasi pagination tetap tidak tahu.
Apa yang salah tentang ide peningkatan saya atas implementasi pagination mereka? Apa alasan mereka untuk tidak menerapkan pagination dengan cara ini?