[C#]从 PagedList(Web API) 与 AngularJs 获取集合中的所有元素的数目

发布时间: 2017/2/24 2:48:58
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我试图弄清楚如何从服务器传递这数字对集合中获取的所有元素数目 total-items ,以便我可以导航之间的所有数据,不仅第一页的元素。

我的 AngularJS 控制器代码-

    $scope.gamesPerPage = 5;    
    $scope.currentPage = 1;
    $scope.totalGames = 0;
    getResultsPage($scope.currentPage, $scope.gamesPerPage);

    $scope.pageChanged = function (pageNumber, pageSize) {
        getResultsPage(pageNumber, pageSize);
    };   

    function getResultsPage(pageNumber, pageSize) {
        gamesFactory.getGames(pageNumber, pageSize)
        .success(function (response) {
            $scope.games = response;
            $scope.totalGames = response.Count; //Returns the number of PagedList elements, 5 in my case
        })        
    };

工厂服务-

    var urlBase = '/api/games/'; 
    factory.getGames = function (pageNumber, pageSize) {
        return $http.get(urlBase + pageNumber + '/' + pageSize);
    };

和 Web APi 2,Get 方法-

        [Route("api/games/{pageNumber}/{pageSize}")]
        public IQueryable<Game> GetGames(int pageNumber, int pageSize)
        {            
            List<Game> games = db.Games.ToList();
            PagedList<Game> pagedList = new PagedList<Game>(games, pageNumber, pageSize);
            return pagedList.AsQueryable();
        }

解决方法 1:

您可以将您的响应包装成将举行总计数的游戏和游戏的分页的集合的对象。

你可以这样做︰

public class GamesHolder
{
    public int TotalCount { get; set; }
    public IEnumerable<Game> PagedGames { get; set; }
}

因此,您的 API enpoint 应返回︰

[Route("api/games/{pageNumber}/{pageSize}")]
public GamesHolder GetGames(int pageNumber, int pageSize)
{            
    List<Game> games = db.Games.ToList();
    return new GamesHolder()
    {
       TotalCount = games.Count,
       PagedGames = new PagedList<Game>(games, pageNumber, pageSize)
    }
}

此外,里面你角 getResultsPage 你将能够检索对象的函数︰

function getResultsPage(pageNumber, pageSize) {
    gamesFactory.getGames(pageNumber, pageSize)
    .success(function (response) {
        $scope.games = response.pagedGames;
        $scope.totalGames = response.totalCount;
    })        
};
官方微信
官方QQ群
31647020