これを理解しようとするのは長い一日でした.stackoverflowには常に答えがあると思います. 似たような投稿を検索しましたが、必死に探しているものはないと思います。これが取り引きです。私はこのMVC 4プロジェクトに取り組んでいますが、いくつかの問題に遭遇したため、それを開くきっかけになりました。MVC でページネーションにIPageListを使用するのは非常にクールですが、インデックスに同じActionResultコンテナーを使用してフィルター処理された結果をページングし続けるにはどうすればよいでしょうか。ここに食事をするためのコードがあります。
public ActionResult Index(int? page, int category = 0)
{
int pageSize = 10;
int pageNumber = (page ?? 1);
if (category != 0)
{
var products = (from p in db.Products where p.ProductID == category select p).OrderBy(x => x.ProductName).ToList();
return View(products.ToPagedList(pageNumber, pageSize));
}
else
{
var products = (from p in db.Products select p).OrderBy(x => x.ProductName).ToList();
return View(products.ToPagedList(pageNumber, pageSize));
}
}
基本的に、int カテゴリはドロップダウン リストから取得した値です。完全にフィルタリングされますが、問題は、フィルタリングして結果が10を超え、次のページに移動しようとすると、インデックスの初期結果に戻ることです。デバッグしてみると、次がクリックされると、 int カテゴリの値がクリアされ、else ブロックにステップインすることがわかりました。これがページングコントロールです。おそらく調整が必要なものがあります...
<div>Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber)
of @Model.PageCount
@if (Model.HasPreviousPage)
{
@Html.ActionLink("<<", "Index", new { page = 1, sortOrder = ViewBag.CurrentSort, currentFilter=ViewBag.CurrentFilter })
@Html.Raw(" ");
@Html.ActionLink("< Prev", "Index", new { page = Model.PageNumber - 1, sortOrder = ViewBag.CurrentSort, currentFilter=ViewBag.CurrentFilter })
}
else
{
@:<<
@Html.Raw(" ");
@:< Prev
}
@if (Model.HasNextPage)
{
@Html.ActionLink("Next >", "Index", new { page = Model.PageNumber + 1, sortOrder = ViewBag.CurrentSort, currentFilter=ViewBag.CurrentFilter })
@Html.Raw(" ");
@Html.ActionLink(">>", "Index", new { page = Model.PageCount, sortOrder = ViewBag.CurrentSort, currentFilter=ViewBag.CurrentFilter })
}
else
{
@:Next >
@Html.Raw(" ")
@:>>
}
私が必要としているのは、ページで返されたフィルタリングされた結果がページングに応答することです。私は答えを待ちます。ありがとう!