1

PagerのHTML Helper クラスを使用しています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 に含める唯一のオプションはありますか?

ViewDataこれはおそらく唯一のオプションではありません。たとえば、または 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 に答える