3.2最簡單的解決方案
我想最簡單無非就是直接寫鏈接,當然也要考慮更換Routing規則的問題,所以我們可以最簡單如下來寫:
<%
int p = 1;
int.TryParse(Request.QueryString["p"], out p);
%>
<div>
<%=Html.ActionLink("上一頁", "Index", new { p= p-1})%>
<strong>當前頁:<%=p %></strong>
<%=Html.ActionLink("下一頁", "Index", new { p= p+1})%>
</div>
這樣就可以得到如果下的分頁樣式
當然,也可以根據這個來寫1,2,3,4,5頁的鏈接,而不寫“上一頁”或“下一頁”
但是這種方法有個問題,就是使用Html.ActionLink的時候要用字符串來指定Action和Controller。下面我們來改換另一種方法來實現
3.3使用RouteLink來實現
我們使用Html.RouteLink就可以實現不與Action或Controller的名稱相耦合,例如:
<%for (int i = 1; i < 10; i++)
{
ViewContext.RouteData.Values["p"] = i;//設置頁碼
Writer.Write(
Html.RouteLink(i.ToString(), ViewContext.RouteData.Values)
);//顯示設置頁面後的鏈接
Writer.Write(" ");//連接後顯示個空格,好看點
}%>
這個列表,我們就可以顯示爲
3.4完善這個Pager並封裝成一個Helper
上面列出了Pager,但是有幾個問題
· 沒有上下頁
· 沒有指定當前頁的特殊顯示
· 每次調用時都要寫一次
· 如果QueryString有其它參數時無法處理
那我們下面來完善這個Pager
並將之封裝成一個Helper
/// <summary>
/// 分頁Pager顯示
/// </summary>
/// <param name="html"></param>
/// <param name="currentPageStr">標識當前頁碼的QueryStringKey</param>
/// <param name="pageSize">每頁顯示</param>
/// <param name="totalCount">總數據量</param>
/// <returns></returns>
public static string Pager(this HtmlHelper html, string currentPageStr, int pageSize, int totalCount)
{
var queryString = html.ViewContext.HttpContext.Request.QueryString;
int currentPage = 1; //當前頁
int.TryParse(queryString[currentPageStr], out currentPage); //與相應的QueryString綁定
var totalPages = Math.Max((totalCount + pageSize - 1) / pageSize, 1); //總頁數
var dict = new RouteValueDictionary(html.ViewContext.RouteData.Values);
var output = new StringBuilder();
foreach (string key in queryString.Keys)
if (queryString[key] != null && !string.IsNullOrEmpty(key))
dict[key] = queryString[key];
if (totalPages > 1)
{
if (currentPage != 1)
{//處理首頁連接
dict["p"] = 1;
output.AppendFormat("{0} ",html.RouteLink("首頁", dict));
}
if (currentPage > 1)
{//處理上一頁的連接
dict["p"] = currentPage - 1;
output.Append(html.RouteLink("上一頁", dict));
}
else
{
output.Append("上一頁");
}
output.Append(" ");
int currint = 5;
for (int i = 0; i <= 10; i++)
{//一共最多顯示10個頁碼,前面5個,後面5個
if ((currentPage + i - currint) >= 1 && (currentPage + i - currint) <= totalPages)
if (currint == i)
{//當前頁處理
output.Append(string.Format("[{0}]", currentPage));
}
else
{//一般頁處理
dict["p"] = currentPage + i - currint;
output.Append(html.RouteLink((currentPage + i - currint).ToString(), dict));
}
output.Append(" ");
}
if (currentPage < totalPages)
{//處理下一頁的鏈接
dict["p"] = currentPage + 1;
output.Append(html.RouteLink("下一頁", dict));
}
else
{
output.Append("下一頁");
}
output.Append(" ");
if (currentPage != totalPages)
{
dict["p"] = totalPages;
output.Append(html.RouteLink("末頁", dict));
}
output.Append(" ");
}
output.AppendFormat("{0} / {1}", currentPage, totalPages);//這個統計加不加都行
return output.ToString();
}
效果