0

ページ付きリストを使用してビュー内のデータをページングしたいと思います。以前は Web グリッドを使用してこれを行いましたが、モデルの最初のアプローチを使用してこれを行うのは難しいと感じています。

ありがとう

4

2 に答える 2

0

github で私の PagedList nuget パッケージを確認してください。

https://github.com/troygoode/pagedlist

これにより、次のようなコードを記述できます。

MyController.cs

public class MyController : Controller{
  public object MyRoute(){
    var pagedProducts = ProductsRepo.All().ToPagedList();
    return View(pagedProducts);
  }
}

MyRoute.cshtml

<ul>
  @foreach(var product in ViewModel){
    <li>@product.Name</li>
  }
</ul>
@Html.PagedListPager(ViewModel, page=> Url.Action("MyRoute", {page = page}))
于 2012-04-16T17:54:08.883 に答える
0

Steve Sanderson は、彼の著書Pro ASP.NET MVC 3でページネーション サポートの例を説明しています

彼は、製品コントローラ (製品の一覧ページ) を次のように説明しています。

public class ProductController : Controller {
   public int PageSize = 4; //This could be retrieved from the database

   private IProductRepository repository;
   public ProductController(IProductRepository repoParam) {
      repository = repoParam;
   }

   public ViewResult List(int page = 1) {
      ProductsListViewModel viewModel = new ProductsListViewModel {
         Products = repository.Products
            .OrderBy(p => p.ProductID)
            .Skip((page - 1) * PageSize)
            .Take(PageSize),
         PagingInfo = new PagingInfo {
            CurrentPage = page,
            ItemsPerPage = PageSize,
            TotalItems = repository.Products.Count()
         }
      };
   return View(viewModel);
}

アクションへのクエリは、次の形式になります。

http://localhost:23081/Product/List?page=2

(または必要なルーティング)。

このビュー モデルは次のようになります。

public class ProductsListViewModel {
   public IEnumerable<Product> Products { get; set; }
   public PagingInfo PagingInfo { get; set; }
}

PagingInfo モデルは次のようになります。

public class PagingInfo {
   public int TotalItems { get; set; }
   public int ItemsPerPage { get; set; }
   public int CurrentPage { get; set; }
   public int TotalPages {
      get { return (int)Math.Ceiling((decimal)TotalItems / ItemsPerPage); }
   }
}

このページング情報を使用して、必要に応じてビューに情報を表示できます。

于 2012-04-16T13:36:51.140 に答える