0

最初に、コントローラーから Web サービスの関数を呼び出し、次にビューに 10 項目のみを表示するように結果をページ分割しました。私は次のように進めました:

コントローラ:

    public ActionResult Index(int? page)
    {
        var companies = _requestServiceClient.GetCompanies();
        int currentPageIndex = page.HasValue ? page.Value - 1 : 0;
        var companiesListPaged = companies.ToPagedList(currentPageIndex, defaultPageSize);
        return View(companiesListPaged);
    }

サービス:

    public IEnumerable<Company> GetCompanies()
    {
        using (var unitOfWork = UnitOfWorkFactory.Create())
        {
            var companyRepository = unitOfWork.Create<Company>();
            return companyRepository.GetAll().MyInclude(x => x.City).ToList();
        }
    }

そのため、すべてのデータがサービスから取得された後にページネーションが行われました。動作しますが、大量のデータが送信されたため、あまり効率的ではありません。次のように、サービスで直接ページネーション作業を行うようにコードを変更しました。

コントローラ:

    [Authorize]
    public ActionResult Index(int? page)
    {
        int currentPageIndex = page.HasValue ? page.Value - 1 : 0;
        var companies = _requestServiceClient.GetCompaniesToPagedList(currentPageIndex, defaultPageSize);
        return View(companies);
    }

サービス:

    public IPagedList<Company> GetCompaniesToPagedList(int PageIndex, int PageSize)
    {
        using (var unitOfWork = UnitOfWorkFactory.Create())
        {
            var companyRepository = unitOfWork.Create<Company>();
            var companies = companyRepository.GetAll().MyInclude(x => x.City).ToList();
            return companies.ToPagedList(PageIndex, PageSize);
        }
    }

コンパイルされますが、実行時にエラーが発生しました:

基礎となる接続が閉じられました: 維持されることが期待されていた接続がサーバーによって閉じられました。

何か案が?コードのこの変更によってこのエラーが発生するのはなぜですか?

私は他に何も変更しませんでした。

ありがとう。


アップデート

そして、ここにIPagedListのコードがあります

public interface IPagedList<T> : IList<T>
{
    int PageCount { get; }
    int TotalItemCount { get; }
    int PageIndex { get; }
    int PageNumber { get; }
    int PageSize { get; }
    bool HasPreviousPage { get; }
    bool HasNextPage { get; }
    bool IsFirstPage { get; }
    bool IsLastPage { get; }
}

ToPagedList の場合

    public static IPagedList<T> ToPagedList<T>(this IEnumerable<T> source, int pageIndex, int pageSize, int? totalCount = null)
    {
        return new PagedList<T>(source, pageIndex, pageSize, totalCount);
    }
4

1 に答える 1

0

呼び出しによって返されるデータの量が、Binding の ReaderQuotas 要素で定義された制限を超える可能性があるかどうかを確認することをお勧めします。

于 2012-04-11T09:28:48.667 に答える