使用ASP.NET MVC进行分页(URL操作?)

时间:2011-03-10 08:45:00

标签: c# asp.net-mvc

您好,

我正在ASP.NET MVC中构建一个HTML帮助程序来处理论坛/线程的分页。对象将从modelView传递给包含以下信息的HTML帮助程序:

CurrentPageNr ObjectsPerPage TotalAmountOfObjects

我的想法是生成一个html输出,它将呈现如下:

[FirstPage] [PrivousePage] [1] [2] [3] [4] [ 5 ] [6] [7] [8] [9] [NextPage] [LastPage] < / p>

问题是如何处理点击。到目前为止我找到的解决方案如下:

解决方案1:让每个链接成为设置隐藏字段(currentPage)的按钮,然后提交表单

解决方案2:我可以操作当前网址(absolutURI)并将其设置为页面中的链接。这里的问题是href可能会变长(对于每个链接)。另一个问题是我没有找到一种操作查询字符串的简单方法,所以如果我必须手动执行此操作,那将是工作:

替换:“&amp; ASP_P = [currentPage]”或 替换:“ASP_P = [currentPage]”如果有?在ASP_P之前

请求建议

4 个答案:

答案 0 :(得分:1)

我要做的是将另一个变量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;
}

答案 1 :(得分:1)

你可以试试这个。

  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()辅助方法注册新的映射规则

答案 2 :(得分:1)

Rob Conery为MVC编写了一个HTML Helper类。您可以找到详细信息here。我实际上是在site上成功使用它,如果你想看到它的实际效果。只需滚动到页面底部即可。

答案 3 :(得分:1)

SnowJim,

我根据rob connerys使用thr IpgaedList接口创建了一个小例子。我实际上指向另一个SO用户一会儿baclk。你可以在这里找到重播:

mvc - ajax pager - make current page inactive link

以及完整示例的下载链接。