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