Bagaimana cara menggunakan dropdown untuk ukuran halaman di pagination dengan tampilan indeks ASP.NET MVC?

Saya telah menggunakan ini untuk membuat halaman daftar catatan di aplikasi ASP.NET MVC 4 saya: http://demo.taiga.nl/MvcPaging/Paging/ViewByCategory

Saya ingin menambahkan dropdown untuk mengubah nilai ukuran halaman. Saat mengubah item yang dipilih di dropdown, saya ingin ukuran halaman diubah. Saya tidak ingin menggunakan ukuran halaman default.

Setelah melihat komentar, inilah yang saya lakukan di Tampilan Index.cshtml setelah elemen <table>:

<div class="pager">
    @Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount)
    Displaying @Model.ItemStart - @Model.ItemEnd of @Model.TotalItemCount items(s)

</div>

@using (Html.BeginForm()) {
  <div id="pro_pag2">
    @Html.DropDownList("PageSize", new SelectList(new Dictionary<string, int> { { "10", 10 }, { "20", 20 }, { "100", 100 } }, "Key", "Value"), new { @class = "pro_pag_tf1", id = "pagesizelist" })
</div>
}

@section scripts {
<script type="text/javascript">
    $('#pagesizelist').on('change', function (event) {
        var form = $(event.target).parents('form');

        form.submit();
    });
</script>
}

Tindakan indeks pengontrol Index.cs:

public ActionResult Index(int? PageSize, int? page)
{
    int? DefaultPageSize = 10;
    int currentPageIndex = page.HasValue ? page.Value - 1 : 0;
    if (PageSize != null) {
        DefaultPageSize = PageSize;
    }
    return View(contractsList.ToPagedList(currentPageIndex, (int)DefaultPageSize));
}

Penggantian nomor halaman berfungsi. Tetapi ketika saya mengubah ukuran halaman dengan dropdown dan memilih 2 sebagai nomor halaman maka defaultnya adalah ukuran halaman...

Saya kira ini karena tombol halaman yang dipilih tidak mengirimkan ukuran halaman yang dipilih dari dropdown...bagaimana cara mendapatkan nilai yang dipilih dari dropdown dalam metode tindakan Indeks?

Bagaimana saya bisa meneruskan nilai yang dipilih dari dropdown setiap kali saya memilih tombol halaman? Tampaknya berfungsi hanya dengan memilih dropdown?

Mungkin ada solusi yang lebih baik?


person Qwerty    schedule 19.03.2014    source sumber


Jawaban (1)


Berdasarkan kode Anda di atas, link halaman 2 yang dihasilkan akan seperti ini:

<a href="/id/Index?page=2">2</a>

sementara ini seharusnya merupakan tautan yang benar jika Anda mengubah ukuran halaman menjadi 20

<a href="/id/Index?PageSize=20&page=2">2</a>

Yang perlu Anda lakukan adalah menambahkan argumen PageSize ke semua link nomor halaman berdasarkan ukuran halaman yang dipilih. Contoh dari http://demo.taiga.nl/MvcPaging/Paging/ViewByCategory menggunakan ViewBag untuk menambahkan argumen categoryName pada setiap link nomor halaman berdasarkan kategori yang dipilih, jadi saya sarankan menggunakan cara serupa.

Pertama, ubah metode pengontrol Anda menjadi ini:

public ActionResult Index(int? PageSize, int? page)
{
    int? DefaultPageSize = 10;
    int currentPageIndex = page.HasValue ? page.Value - 1 : 0;
    if (PageSize != null) {
        DefaultPageSize = PageSize;
    }

    ViewBag.PageSize = DefaultPageSize;

    return View(contractsList.ToPagedList(currentPageIndex, (int)DefaultPageSize));
}

lalu ubah konten <div class="pager"> di kode Tampilan Anda menjadi ini

<div class="pager">
    @Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount).Options(o => o.AddRouteValue("PageSize", ViewBag.PageSize))
    Displaying @Model.ItemStart - @Model.ItemEnd of @Model.TotalItemCount items(s)

</div>
person ekad    schedule 21.03.2014