2013-06-20 80 views
1

我正在使用twitter.bootstrap.mvc中的Pager HTML幫助器類。它將建立Bootstrap的頁面鏈接列表。如何將當前URL參數傳遞給替換方法

如何將當前的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中?

回答

1

是我唯一的選擇來指定每個參數,並在 ViewModel以及URL?

這可能不是你唯一的選擇,你可以看看使用ViewData或cookie例如,但它可能是最好的選擇。

ViewModel應該確實包含呈現視圖所需的所有數據。鑑於你的分頁控件依賴於這些數據,它不是不合理的,它是你的ViewModel的一部分。

您查看仍然看起來很整齊

例如,

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

如果你有很多的參數T通的,你可以通過做一個特殊的「尋呼」類,將容納所有的尋呼所要求的細節加強這方面的,都以此爲模型的屬性修改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))`