在我的ASP.NET MVC 3项目中,我创建了一个PaginatedList帮助器。我在视图中处理如下:
@model TugberkUgurlu.Mvc.Helpers.PaginatedList<ContactModel>
@*
some razor code here to display the data
*@
<div id="pager">
@if (Model.HasPreviousPage)
{
@:@Html.RouteLink("<<<< Previous",
"Default",
new { page = (Model.PageIndex - 1) })
}
@if (Model.TotalPages >= 2)
{
for (int i = 0; i < Model.TotalPages; i++)
{
int value = i + 1;
if (Model.PageIndex == i)
{
@:@Html.RouteLink(value.ToString(),
"Default",
new { page = (i) }, new { @class = "bold" })
}
else
{
@:@Html.RouteLink(value.ToString(),
"Default",
new { page = (i) })
}
}
}
@if (Model.HasNextPage)
{
@:@Html.RouteLink("Next >>>>",
"Default",
new { page = (Model.PageIndex + 1) })
}
</div>
我想为<div id="pager"></div>
元素中的代码创建一个HelperResult,这样我就不会重复自己了,最重要的是,当我对该代码进行更改时,它会在任何地方进行更改正在使用。
我还没有想出最好的主意。有什么想法吗?
答案 0 :(得分:1)
对于我的使用,我意识到帮助者会做一些类似于你的要求的帮助。我使用了一些其他变量,但我认为你可以得到这个想法,可以根据你的需要获取我的代码和修改
public static MvcHtmlString PageLinks(this HtmlHelper html, int totalItems, int itemsPerPage, int currentPage, Func<int, string> pageUrl)
{
return PageLinks(html, totalItems, itemsPerPage, currentPage, "", "", pageUrl);
}
public static MvcHtmlString PageLinks(this HtmlHelper html, int totalItems, int itemsPerPage, int currentPage, string cssClass, string cssClassSelectedPage, Func<int, string> pageUrl)
{
int totalPages = (int)Math.Ceiling((decimal)totalItems / itemsPerPage);
StringBuilder result = new StringBuilder();
for (int i = 1; i <= totalPages; i++)
{
string css = cssClass;
TagBuilder tag = new TagBuilder("a");
tag.MergeAttribute("href", pageUrl(i));
tag.InnerHtml = i.ToString();
if (i == currentPage)
css += " " + cssClassSelectedPage;
if (!String.IsNullOrEmpty(cssClass))
tag.AddCssClass(css);
result.AppendLine(tag.ToString());
}
return MvcHtmlString.Create(result.ToString());
}
然后从视图中你可以这样打电话:
@Html.PageLinks(Model.TotalItems, Model.PageSize, Model.Page, "page_link", "active_page", x => Url.Action("MyList", "Home", new { page = x }))%>
基本上我传递一个带路由规则的函数来生成所有链接
这是我在Global.asax中的规则
routes.MapRoute("", "MyList/{page}", new { controller = "Home", action = "MyList", page = 0 }, new { page = @"\d+" });
希望它可以帮助您完成任务