簡體   English   中英

使用ASP.NET MVC分頁(URL操作?)

[英]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()幫助方法注冊新的映射規則

Rob Conery為此為MVC編寫了一個HTML Helper類。 您可以在此處找到詳細信息。 如果您想實際使用它,我實際上已在我的網站上成功使用它。 只需滾動到頁面底部。

SnowJim,

我根據rob connerys使用thr IpgaedList接口創建了一個小例子。 實際上,我曾向另一位SO用戶指出了這一點。 您可以在此處找到重播:

mvc-ajax pager-使當前頁面變為非活動鏈接

以及完整示例的下載鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM