จะใช้ดรอปดาวน์สำหรับขนาดหน้าในการแบ่งหน้าด้วยมุมมองดัชนี ASP.NET MVC ได้อย่างไร

ฉันใช้สิ่งนี้เพื่อเพจรายการบันทึกในแอปพลิเคชัน ASP.NET MVC 4 ของฉัน: http://demo.taiga.nl/MvcPaging/Paging/ViewByCategory

ฉันต้องการเพิ่มเมนูแบบเลื่อนลงเพื่อเปลี่ยนค่าของขนาดหน้า เมื่อมีการเปลี่ยนแปลงรายการที่เลือกในเมนูแบบเลื่อนลง ฉันต้องการให้ขนาดหน้าเปลี่ยนแปลง ฉันไม่ต้องการใช้ขนาดหน้าเริ่มต้น

หลังจากดูความคิดเห็น นี่คือสิ่งที่ฉันทำใน Index.cshtml ดูหลังองค์ประกอบ <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>
}

การดำเนินการดัชนีของตัวควบคุม 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));
}

การเปลี่ยนหมายเลขหน้าใช้งานได้ แต่เมื่อฉันเปลี่ยนขนาดหน้าด้วยดรอปดาวน์และเลือก 2 เป็นหมายเลขหน้า มันจะใช้ขนาดหน้าเริ่มต้น...

ฉันเดาว่าเป็นเพราะปุ่มเลือกหน้าไม่ส่งขนาดหน้าที่เลือกจากดรอปดาวน์...ฉันจะรับค่าที่เลือกจากดรอปดาวน์ในวิธีดำเนินการดัชนีได้อย่างไร

ฉันจะส่งค่าที่เลือกจากดรอปดาวน์ทุกครั้งที่เลือกปุ่มหน้าได้อย่างไร ดูเหมือนว่าจะใช้งานได้โดยเลือกดรอปดาวน์ใช่ไหม

อาจมีวิธีแก้ปัญหาที่ดีกว่านี้?


person Qwerty    schedule 19.03.2014    source แหล่งที่มา


คำตอบ (1)


จากโค้ดของคุณด้านบน ลิงก์ที่สร้างขึ้นของหน้าที่ 2 จะเป็นดังนี้:

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

ขณะนี้ควรเป็นลิงก์ที่สร้างขึ้นที่ถูกต้องหากคุณเปลี่ยนขนาดหน้าเป็น 20

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

สิ่งที่คุณต้องทำคือเพิ่มอาร์กิวเมนต์ PageSize ให้กับลิงก์หมายเลขหน้าทั้งหมดตามขนาดหน้าที่เลือก ตัวอย่างจาก http://demo.taiga.nl/MvcPaging/Paging/ViewByCategory ใช้ ViewBag เพื่อเพิ่มอาร์กิวเมนต์ categoryName ให้กับลิงก์หมายเลขหน้าแต่ละลิงก์ตามหมวดหมู่ที่เลือก ดังนั้นฉันขอแนะนำให้ใช้วิธีที่คล้ายกัน

ขั้นแรก เปลี่ยนวิธีการควบคุมของคุณเป็น:

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));
}

จากนั้นเปลี่ยนเนื้อหาของ <div class="pager"> ในโค้ด View ของคุณเป็นสิ่งนี้

<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