在asp.net中我們知道有viewstate這樣的頁面級容器為我們保存表單數據,這樣我們每次提交時數據都不會丟失,很容易的完成查詢+分頁的實現。找過相關MVC分頁的例子,都是擴展HtmlHelper方法來實現。我想大家在ASP.NET開發中都用過 wuqi的AspNetPager分頁控件以及dacey的NSunPage用來開發Winform項目的分頁控件非常方便的滿足了大家的分頁需求。那麼我們來看下在MVC中的查詢+分頁是怎麼實現的。(這裡我用到了wuqi的mvcpager)
下面例子是asp.net中的分頁查詢:
前台代碼:
<html>
<body>
<form id="form1" runat="server">
部門編號:<asp:TextBox ID="deptcode" Width="80px" runat="server"></asp:TextBox>
部門名稱:<asp:TextBox ID="deptname" Width="80px" runat="server" ></asp:TextBox>
<asp:Button ID="btnquery" runat="server" Text="查詢" onclick=" btnquery_Click"/>
<table class="TableBlock" width="100%" style="margin-top: 10px;">
<tr>
<th>編號</th>
<th>名稱</th>
</tr>
<asp:Repeater ID="TableBlockList" runat="server">
<ItemTemplate>
<tr>
<td><%#Eval("code") %></td>
<td><%#Eval("name") %></td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
</form>
</body>
</html>
後台代碼:
protected virtual SelectSqlSection GetSelectSearch()
{
SelectSqlSection 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 countPage = 0;
DataTable dt =db.SelectPageToDataTable(GetSelectSearch (), anp.PageSize, anp.CurrentPageIndex,
out countPage);
anp.RecordCount = countPage;
rpt.DataSource = dt;
rpt.DataBind();
}