您好,
我正在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之前
请求建议
答案 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)
答案 3 :(得分:1)
SnowJim,
我根据rob connerys使用thr IpgaedList接口创建了一个小例子。我实际上指向另一个SO用户一会儿baclk。你可以在这里找到重播:
mvc - ajax pager - make current page inactive link
以及完整示例的下载链接。