如何将当前URL参数传递给替换方法

时间:2013-06-20 00:59:19

标签: asp.net-mvc asp.net-mvc-4

我正在使用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中吗?

1 个答案:

答案 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))`