WebForms 依賴 ViewState 保持查詢條件,MVC 則需透過 QueryString 或 TempData 傳遞。本文示範使用 MvcPager 套件實現查詢條件保持與分頁。
// 後台建立查詢條件
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();
}
Html.Pager 輔助方法產生分頁連結,保留查詢字串。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);
}
@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 // 關鍵:保留查詢條件
})