我正在使用twitter.bootstrap.mvc
中的Pager
HTML帮助程序类。它将构建Bootstrap的页面链接列表。
如何将当前网址参数传递给此功能?
public static MvcHtmlString Pager(this HtmlHelper helper,
int currentPage, int totalPages,
Func<int, string> pageUrl, <-- This
string additionalPagerCssClass = "") {
...
a.MergeAttribute("href", pageUrl(i));
...
}
它被称为:
@Html.Pager(Model.PageIndex, Model.TotalPages, x => Url.Action("Results", "Search", new { page = x }))
x => Url.Action("Results", "Search", new { page = x })
是我不知道如何改变的部分。这是一个搜索结果页面,并在URL中将搜索设置作为参数。为了使分页工作,我需要这些参数。
我唯一的选择是指定每个参数并将它们放在ViewModel和URL中吗?
答案 0 :(得分:1)
我唯一的选择是指定每一个参数并将它们放入 ViewModel以及URL?
这可能不是您唯一的选择,您可以查看使用ViewData
或Cookie,但它可能是最佳选择。
ViewModel应该包含渲染视图所需的所有数据。鉴于您的分页控件依赖于此数据,因此它成为ViewModel的一部分并非没有道理。
你的视图仍然看起来相当整洁
e.g。
`@Html.Pager(Model.PageIndex, Model.TotalPages, x => Url.Action("Results", "Search", new { page = x, search = Model.Search, orderBy = Model.OrderBy }))`
如果你有很多参数通过,你可以通过制作一个特殊的“Paging”类来增强这一点,该类将保存分页所需的所有细节,将此作为模型的属性修改HtmlHelper以接受此,整理一些代码。
e.g。
public class PagingDetails
{
public int TotalPages { get; set; }
public int CurrentPage { get; set; }
public int TotalResults { get; set; }
public string Search { get; set; }
public string OrderBy { get; set; }
...other parameters...
}
public static MvcHtmlString Pager(this HtmlHelper helper,
Func<int, string> pageUrl,
PagingDetails pagingDetails,
string additionalPagerCssClass = "")
{
// need to tweak this to append extra parameters to resulting URL
}
`@Html.Pager(x => Url.Action("Results", "Search", new { page = x }, Model.PagingDetails))`