1

我正在使用Pager来自twitter.bootstrap.mvc. 它将为 Bootstrap 构建页面链接列表。

我如何将当前的 URL 参数传递给这个函数?

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 中吗?

4

1 回答 1

1

我唯一的选择是指定每个参数并将它们放在 ViewModel 和 URL 中吗?

这可能不是您唯一的选择,例如,您可以查看使用ViewDatacookie 或 cookie,但这可能是最佳选择。

ViewModel 应该真正包含渲染视图所需的所有数据。鉴于您的分页控件依赖于这些数据,将其作为 ViewModel 的一部分并非不合理。

你的视图看起来仍然相当整洁

例如

`@Html.Pager(Model.PageIndex, Model.TotalPages, x => Url.Action("Results", "Search", new { page = x, search = Model.Search, orderBy = Model.OrderBy }))`

如果您有很多要传递的参数,您可以通过制作一个特殊的“分页”类来增强这一点,该类将包含分页所需的所有详细信息,将此作为模型的属性修改 HtmlHelper 以接受此,整理一些这段代码。

例如

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))`
于 2013-06-20T05:45:28.143 回答