[英]Paging with ASP.NET MVC (URL manipulation?)
嗨,
我在ASP.NET MVC中構建HTML幫助器,以處理論壇/線程的分頁。 一個對象將從modelView傳遞到保存以下信息的HTML幫助器:
CurrentPageNr ObjectsPerPage TotalAmountOfObjects
我的想法是生成一個html輸出,它將呈現如下內容:
[首頁] [主要頁面] [1] [2] [3] [4] [ 5 ] [6] [7] [8] [9] [下一頁] [尾頁]
問題是如何處理點擊。 到目前為止,我發現的解決方案如下:
解決方案1:讓每個鏈接成為一個按鈕,該按鈕設置一個隱藏字段(currentPage),然后提交表單
解決方案2:我可以操縱當前的url(absolutURI)並將其設置為頁面中的鏈接。 這里的問題是href的長度可能會有所不同(對於每個鏈接)。 另一個問題是我還沒有找到一種簡單的方法來操縱查詢字符串,因此,如果我必須手動執行此操作,那就太麻煩了:
替換:“&ASP_P = [currentPage]”或替換:“ ASP_P = [currentPage]”(如果存在?) 在ASP_P之前
辯訴意見
我要做的是使另一個變量NumberOfPages向上取整(Total Size / ObjectsPerPage)。
然后只需遍歷每個“頁面”並為鏈接生成href:
一個簡單的例子如下:
public static string GetPageNumberLink(this HtmlHelper helper, string nameOfPageParameter, int pageNumber)
{
//set the placeholder
string queryValues = helper.ViewContext.HttpContext.Request.Url.Query;
helper.ViewContext.RouteData.Values[nameOfPageParameter] = "..PAGEHERE..";
string virtualPath = helper.ViewContext.RouteData.Route.GetVirtualPath(helper.ViewContext.RequestContext, helper.ViewContext.RouteData.Values).VirtualPath;
return helper.ResolveUrl("~/" + virtualPath.Replace("..PAGEHERE..", pageNumber.ToString())) + queryValues;
}
你可以試試看
public Index(int? page)
{
int pageSize=10;
var List= Repo.GetAllMembers();
var paginatedList = List.Skip((page ?? 0) * pageSize).Take(pageSize).ToList();
return View(paginatedList);
}
給出pageSize作為要分配的記錄數
然后在Global.asax中使用MapRoute()幫助方法注冊新的映射規則
SnowJim,
我根據rob connerys使用thr IpgaedList接口創建了一個小例子。 實際上,我曾向另一位SO用戶指出了這一點。 您可以在此處找到重播:
以及完整示例的下載鏈接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.