首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET MVC 查詢與分頁整合實作 (搭配 MvcPager)

     編輯:關於ASP.NET

WebForms 依賴 ViewState 保持查詢條件,MVC 則需透過 QueryString 或 TempData 傳遞。本文示範使用 MvcPager 套件實現查詢條件保持與分頁。

WebForms 參考架構 (回顧)

// 後台建立查詢條件
protected virtual SelectSqlSection GetSelectSearch()
{
    var select = db.GetSelectSqlSection();
    if (!string.IsNullOrEmpty(deptname.Text))
        select.Where(View_DeptQueryInfo.__name.Like(deptname.Text + "%"));
    if (!string.IsNullOrEmpty(deptcode.Text))
        select.Where(View_DeptQueryInfo.__code.Like(deptcode.Text + "%"));
    return select;
}

// 繫結分頁
protected void BindTable(Repeater rpt, AspNetPager anp)
{
    int total = 0;
    var dt = db.SelectPageToDataTable(GetSelectSearch(), anp.PageSize, anp.CurrentPageIndex, out total);
    anp.RecordCount = total;
    rpt.DataSource = dt;
    rpt.DataBind();
}

MVC 實作重點

  1. Controller 接收查詢參數與頁碼,建構 ViewModel。
  2. View 使用 Html.Pager 輔助方法產生分頁連結,保留查詢字串。
  3. MvcPager 自動處理頁碼連結的 QueryString 合成。

Controller 範例

public ActionResult Index(string deptCode, string deptName, int page = 1)
{
    var query = db.Depts.AsQueryable();
    if (!string.IsNullOrEmpty(deptCode))
        query = query.Where(d => d.Code.StartsWith(deptCode));
    if (!string.IsNullOrEmpty(deptName))
        query = query.Where(d => d.Name.StartsWith(deptName));

    int pageSize = 10;
    var pagedList = query.OrderBy(d => d.Code).ToPagedList(page, pageSize);

    ViewBag.DeptCode = deptCode;
    ViewBag.DeptName = deptName;
    return View(pagedList);
}

View 範例 (Razor)

@model IPagedList
@using MvcPager

<form method="get">
    部門編號:<input name="deptCode" value="@ViewBag.DeptCode" />
    部門名稱:<input name="deptName" value="@ViewBag.DeptName" />
    <input type="submit" value="查詢" />
</form>

<table>
    @foreach (var item in Model) { <tr><td>@item.Code</td><td>@item.Name</td></tr> }
</table>

@Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount,
    new PagerOptions { 
        HttpMethod = HttpMethod.Get,
        QueryStringKey = "page",
        PreserveQueryStrings = true // 關鍵:保留查詢條件
    })

關鍵優勢

  • URL 可分享、可書籤、支援瀏覽器前進後退。
  • 無 ViewState,頻寬更輕量。
  • 分頁元件可重複使用於任意列表頁面。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved