Sorting information for use with the grid.
 public ActionResult Advance(string account, string originator, string seller, string investor, string columnToSort, string sortDirection,GridSortOptions gridSortOptions, int? page)
 {
     if (Request.IsAjaxRequest())
     {
         gridSortOptions.Column = columnToSort;
         gridSortOptions.Direction = (sortDirection == "ASC") ? MvcContrib.Sorting.SortDirection.Ascending : MvcContrib.Sorting.SortDirection.Descending;
     }
     if (account == "account #")
         account = "";
     if (originator == "originator")
         originator = "";
     if (seller == "seller")
         seller = "";
     if (investor == "investor")
         investor = "";
     var dataQueries = new DataQueries();
     IQueryable<SearchResult> results = dataQueries.GetSearchResults(account, originator, seller, investor);
     //return PartialView("_BasicPartial", results);
     var pagedViewModel = new PagedViewModel<SearchResult>
     {
         ViewData = ViewData,
         Query = results,
         GridSortOptions = gridSortOptions,
         DefaultSortColumn = "ACCOUNT",
         Page = page,
         PageSize = 20,
     }
     .Setup();
     if (Request.IsAjaxRequest())
         return PartialView("_BasicPartial",pagedViewModel);
     return View("Basic",pagedViewModel);
 }
        public virtual ActionResult List(GridSortOptions gridSortOptions, int? page = null, int? itemsPerPage = null, string search = null)
        {
            if (gridSortOptions.Column == null)
            {
                gridSortOptions.Column = "Id";
            }

            var entitiesperPage = !itemsPerPage.HasValue ? PagedEntityListFilterDto.DefaultItemsPerPage : itemsPerPage.Value;
            var currentPage = !page.HasValue? 1 : page.Value;

            var userFilter = new PagedEntityListFilterDto
            {
                AscendingOrder = gridSortOptions.Direction == SortDirection.Ascending,
                Column = gridSortOptions.Column,
                StartPage = currentPage,
                ItemsPerPage = entitiesperPage,
                SearchText = search
            };

            var users = userService.GetPage(userFilter);

            var userEntitiesViewModel = EntityToViewModelMapper.Mapper.Map(users.Entities, new List<UserViewModel>());

            var pagination = new CustomPagination<UserViewModel>(userEntitiesViewModel, users.Page, entitiesperPage, users.Count);

            var usersViewModel = new UserListViewModel
            {
                Users = pagination,
                GridSortOptions = gridSortOptions,
                Page = currentPage,
                Search = search
            };

            return View(usersViewModel);
        }
 public ActionResult Basic(string basicSearchVal, string columnToSort, string sortDirection, GridSortOptions gridSortOptions, int? page)
 {
     if (Request.IsAjaxRequest())
     {
         gridSortOptions.Column = columnToSort;
         gridSortOptions.Direction = (sortDirection == "ASC") ? MvcContrib.Sorting.SortDirection.Ascending : MvcContrib.Sorting.SortDirection.Descending;
     }
     var dataQueries = new DataQueries();
     IQueryable<SearchResult> results = dataQueries.GetSearchResults(basicSearchVal);
     //return PartialView("_BasicPartial", results);
     var pagedViewModel = new PagedViewModel<SearchResult>
     {
         ViewData = ViewData,
         Query = results,
         GridSortOptions = gridSortOptions,
         DefaultSortColumn = "ACCOUNT",
         Page = page,
         PageSize = 50,
     }
     .Setup();
     if (Request.IsAjaxRequest())
         return PartialView("_BasicPartial", pagedViewModel);
     return View(pagedViewModel);
     //return PartialView("_BasicPartial",pagedViewModel);
 }
예제 #4
0
        public ActionResult Index( GridSortOptions sort)
        {
            //BaseController
            var a = AdminUser;
            var b = User;

            return View(AdminUser);
        }
예제 #5
0
        public ActionResult Index(int? page, GridSortOptions sort)
        {
            const int pageSize = 10;
            var pageNumber = page ?? 1;

            var source = DbProvider.D<Role>().Where(x => !x.IsDelete).OrderBy(x=>x.ID);

            return View(source.ToPagedList(pageNumber - 1, pageSize));
        }
예제 #6
0
 public void ConstructPageViewModelWithApplyMethodResult()
 {
     var query = MockRepositoryMethod();
     var viewData = new ViewDataDictionary();
     viewData["GridSortOptions"] = new GridSortOptions();
     viewData["PageNumber"] = 1;
     viewData["PageSize"] = 10;
     var model = PagedViewModelFactory.Create<MockEntity>(viewData).Apply(query).Setup();
     Assert.AreEqual(query.Count(), model.PagedList.Count());
 }
예제 #7
0
        public ActionResult Index(DealSearchViewModel search, GridSortOptions sort, int? page)
        {
            search.ControllerName = "ChannelDirector";
            search.ActionName = "Index";
            ViewBag.SearchModel = search;
            ViewBag.Sort = sort;

            IQueryable<Deal> deals = DealMgr.GetChannelDirectorDeals().Search(search);
            return View(SortAndPagingDeal(deals, sort, page));
        }
예제 #8
0
        /// <summary>
        /// This method takes in a filter list, paging/sort options and applies
        /// them to an IQueryable of type ProductViewModel
        /// </summary>
        /// <returns>
        /// The return object is a container that holds the sorted/paged list,
        /// state for the fiters and state about the current sorted column
        /// </returns>
        public ActionResult Index(
            string productName, 
            int? supplierID, 
            int? categoryID, 
            GridSortOptions gridSortOptions, 
            int? page)
        {
            var productList = productRepository.GetProductsProjected();

            // Set default sort column
            if (string.IsNullOrWhiteSpace(gridSortOptions.Column))
            {
                gridSortOptions.Column = "ProductID";
            }

            // Filter on SupplierID
            if (supplierID.HasValue)
            {
                productList = productList.Where(a => a.SupplierID == supplierID);
            }

            // Filter on CategoryID
            if (categoryID.HasValue)
            {
                productList = productList.Where(a => a.CategoryID == categoryID);
            }

            // Filter on ProductName
            if (!string.IsNullOrWhiteSpace(productName))
            {
                productList = productList.Where(a => a.ProductName.Contains(productName));
            }

            // Create all filter data and set current values if any
            // These values will be used to set the state of the select list and textbox
            // by sending it back to the view.
            var productFilterViewModel = new ProductFilterViewModel();
            productFilterViewModel.SelectedCategoryID = categoryID ?? -1;
            productFilterViewModel.SelectedSupplierID = supplierID ?? -1;
            productFilterViewModel.Fill();

            // Order and page the product list
            var productPagedList = productList
                   .OrderBy(gridSortOptions.Column, gridSortOptions.Direction)
                   .AsPagination(page ?? 1, 10);

            var productListContainer = new ProductListContainerViewModel
            {
                ProductPagedList = productPagedList,
                ProductFilterViewModel = productFilterViewModel,
                GridSortOptions = gridSortOptions
            };

            return View(productListContainer);
        }
예제 #9
0
        public virtual ActionResult Grid(GridSortOptions sort, int? page)
        {
            var model = settings.GetAllSettings().AsPagination(page ?? 1, 10) as IEnumerable<Settings>;

            if (sort.Column != null)
            {
                model = model.OrderBy(sort.Column, sort.Direction);
            }
            ViewData["sort"] = sort;
            return View(model);
        }
        public ActionResult Index(int? page,GridSortOptions sort)
        {
            ViewBag.Sort = sort;
            int pageSize = 20;

            int startRow = pageSize * ((page ?? 1) - 1);
            IEnumerable<Employee> customers = EmployeeTask.FindAll(startRow, pageSize, sort);
            IFutureValue<int> count = EmployeeTask.CountAll();

            return View(new CustomPagination<Employee>(customers, page ?? 1, pageSize, count.Value));
        }
예제 #11
0
		public ActionResult Sorting(GridSortOptions sort) 
		{
			ViewData["sort"] = sort;
			var people = _peopleFactory.CreatePeople();

			if(!string.IsNullOrEmpty(sort.Column)) {
				people = people.OrderBy(sort.Column, sort.Direction);
			}

			return View(people);
		}
예제 #12
0
        public ActionResult Index(LoveBank.Web.Admin.Models.Test model, GridSortOptions sort)
        {
            //var source = DbProvider.D<User>().Where(x => x.IsDelete).OrderBy(sort.Column,
            //                                                             sort.Direction == SortDirection.Ascending);

            //return View(source.ToPagedList(pageNumber - 1, pageSize));

            //LoveBank.Web.Admin.Models.Test model = new Models.Test();

            model.list = DbProvider.D<TestProduct>().Where(x => x.ID > 0).OrderBy(sort.Column, sort.Direction == SortDirection.Descending).ToPagedList<TestProduct>(Int32.Parse( model.UserName), 5);
            return View(model);
        }
예제 #13
0
		public ActionResult SortingAndPaging(int? page, GridSortOptions sort) 
		{
			ViewData["sort"] = sort;
			var people = _peopleFactory.CreatePeople();

			if (!string.IsNullOrEmpty(sort.Column)) {
				people = people.OrderBy(sort.Column, sort.Direction);
			}

			people = people.AsPagination(page ?? 1, 10);

			return View(people);
		}
        //
        // GET: /MVCContrib/
        public ActionResult Index(GridSortOptions sort, int? page)
        {
            IPagination<Employee> emp = null;
          
            if (sort.Column == null) sort.Column = "Name";
            if (sort.Direction.ToString().ToLower() == "descending")
                emp = db.Employees.AsEnumerable().OrderByDescending(i => i.GetType().GetProperty(sort.Column).GetValue(i, null)).AsPagination(page ?? 1, 2);
            else
                emp = db.Employees.AsEnumerable().OrderBy(i => i.GetType().GetProperty(sort.Column).GetValue(i, null)).AsPagination(page ?? 1, 2);

            ViewData["sort"] = sort;
            return View(emp);
        }
예제 #15
0
        private RouteValueDictionary CreateRouteValuesForSortOptions(GridSortOptions sortOptions, string prefix)
        {
            if (string.IsNullOrEmpty(prefix))
            {
                return(new RouteValueDictionary(sortOptions));
            }

            //There must be a nice way to do this...
            return(new RouteValueDictionary(new Dictionary <string, object>()
            {
                { prefix + "." + "Column", sortOptions.Column },
                { prefix + "." + "Direction", sortOptions.Direction }
            }));
        }
예제 #16
0
        //
        // GET: /Contract/
        public ViewResult Index(DealSearchViewModel search, GridSortOptions sort, int? page)
        {
            search.ControllerName = "Contract";
            search.ActionName = "Index";
            ViewBag.SearchModel = search;

            ViewBag.Sort = sort;
            COATMemebershipUser user = GetCurrentMemberShipUser();
            IQueryable<Deal> deals =
                Db.Deals.Where(a => a.ApproverId == user.Id || user.SystemRole.Id == SystemRoleIds.Admin).Search(search);
            ViewBag.SummaryDeals = deals;

            return View(SortAndPagingDeal(deals, sort, page));
        }
예제 #17
0
 public ActionResult List(String BaseType,
                          GridSortOptions sort, 
                          int? page)
 {
     if (Session[StashItemListVar] != null)
     {
         List<ExiledToolkit.Models.ToolkitObjects.Item> lItemList = (List<ExiledToolkit.Models.ToolkitObjects.Item>)Session[StashItemListVar];
         ExiledToolkit.Models.ListViewModel model = new Models.ListViewModel();
         model.ItemPagedList = lItemList.Where(it => it.BaseType == BaseType).AsPagination( page ?? 1, 20);
         model.ItemSorter = sort;
         return View(model);
     }
     return View();
 }
예제 #18
0
        //
        // GET: /Admin/
        public ActionResult Index(DealSearchViewModel search, GridSortOptions sort, int? page)
        {
            search.ControllerName = "Admin";
            search.ActionName = "Index";
            search.IsHideStatus = true;
            ViewBag.SearchModel = search;

            ViewBag.Sort = sort;
            var deals = DealMgr.GetEndDeals()
                 .Where(a => a.Status.ActionName != "")
                 .Where(a => a.CreateDate <= DateTime.Today)
                 .Search(search);
            ViewBag.SummaryDeals = deals;
            return View(SortAndPagingDeal(deals, sort, page));
        }
        public ActionResult ProductDetails(int id, GridSortOptions sort, int? page)
        {
            var product = _productRepository.GetByProductId(id);

            var reviews = _reviewRepository.List(id);

              //      var total = reviews.Aggregate(0, (current, r) => current + r.Rating);
              //      var avg = 0;
              //     if(reviews.Count>0)avg = total / reviews.Count;

            ViewData["sort"] = sort;

            var reviewRowList = new List<ReviewRowModel>();
            if (reviews.Count() > 0)
            {
                reviewRowList = reviews.Select(r => new ReviewRowModel
                                                        {
                                                            SubmitterName =
                                                                _submitterRepository.GetByUserId(r.UserId).Name,
                                                            DetailedReview = r.Detail,
                                                            Rating = r.Rating,
                                                            Id = r.Id,
                                                            Flagged = r.Flagged
                                                        }).ToList();
            }
            IEnumerable<ReviewRowModel> orderedEnumerable = reviewRowList.OrderBy(r => r.SubmitterName);
                    //Sort by product code as default
                if (sort.Column != null)
                    orderedEnumerable = orderedEnumerable.OrderBy(sort.Column, sort.Direction);

            var productViewModel = new ProductViewModel
                                       {
                                           Description = product.Description,

                                           ManafacturerName =
                                               _manafacturerRepository.GetByManafacturerId(product.ManafacturerId).Name,
                                           Price = product.Price,
                                           ProductCode = product.ProductCode,
                                           ProductId = product.ProductId,
                                           ProductName = product.Name,
                                           ReviewRows = orderedEnumerable.AsPagination(page ?? 1, 10),
                                           TotalReviewRows = reviews.Count,
                                           AverageRating = _reviewRepository.GetAverageProductRating(product.ProductId)
                                      };

            return View(productViewModel);
        }
예제 #20
0
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            int page = 1;
            int pageSize = PageSize;
            var request = filterContext.HttpContext.Request;
            if (!string.IsNullOrWhiteSpace(request["page"]))
                int.TryParse(request["page"], out page);
            if (!string.IsNullOrWhiteSpace(request["size"]))
                int.TryParse(request["size"], out pageSize);
            filterContext.Controller.ViewBag.PageNumber = page;
            filterContext.Controller.ViewBag.PageSize = pageSize;
            GridSortOptions gso = new GridSortOptions();
            gso.Column = request["column"];

            gso.Direction = request.ToMaybe().With(r => r["direction"]).With(s => s.ToLower()).Value == "ascending" ? SortDirection.Ascending : SortDirection.Descending;
            filterContext.Controller.ViewBag.GridSortOptions = gso;
        }
        public ActionResult List(string searchWord, int? genreId, int? artistId, GridSortOptions gridSortOptions,
                                 int? page)
        {
            PagedViewModel<C_Mechanism> pagedViewModel = new PagedViewModel<C_Mechanism>
                                                             {
                                                                 ViewData = ViewData,
                                                                 Query = new BLL.C_Mechanism().GetList().AsQueryable(),
                                                                 GridSortOptions = gridSortOptions,
                                                                 DefaultSortColumn = "MECHANISMID",
                                                                 Page = page,
                                                                 PageSize = 10,
                                                             }
                .AddFilter("searchWord", searchWord, a => a.机构名称.Contains(searchWord))
                .Setup();

            return View(pagedViewModel);
        }
예제 #22
0
        public ActionResult Index(string filter, string level, DateTime? from, DateTime? to, int? page, GridSortOptions sort)
        {
            var profiler = MiniProfiler.Current;

            using (profiler.Step("Query database"))
            {
                ViewBag.Level = _db.Logs.Select(x => x.Level).Distinct()
                    .Select(x => new SelectListItem {Text = x, Value = x});

                var logs = _db.Logs.AsQueryable();

                if (from.HasValue)
                {
                    logs = logs.Where(x => x.Date >= from.Value);
                }

                if (to.HasValue)
                {
                    logs = logs.Where(x => x.Date <= to.Value);
                }

                if (!string.IsNullOrWhiteSpace(filter))
                {
                    logs = logs.Where(x => x.Message.Contains(filter) || x.Exception.Contains(filter));
                }

                if (!string.IsNullOrWhiteSpace(level))
                {
                    logs = logs.Where(x => x.Level == level);
                }

                if (sort.Column != null)
                    logs = logs.OrderBy(sort.Column, sort.Direction);

                ViewBag.Sort = sort;

                using (profiler.Step("Build viewModel"))
                {
                    var viewModel = new DashboardViewModel
                                        {
                                            Logs = logs.MapTo<LogViewModel>().AsPagination(page ?? 1, 10)
                                        };
                    return View(viewModel);
                }
            }
        }
        public ActionResult Index(int? page, GridSortOptions sort)
        {
            ViewBag.Sort = sort;
            var contacts = contactRepository.All().Where(x => x.Status != Status.Deleted);
            if (sort != null && sort.Column != null)
            {
                var orderedContacts = contacts.OrderBy(sort.Column, sort.Direction);
                var pagedOrderedContacts = orderedContacts.AsPagination(page ?? 1, 10);

                return View(pagedOrderedContacts);
            }
            else
            {
                var pagedContacts = contacts.ToList().AsPagination(page ?? 1, 10);

                return View(pagedContacts);
            }
        }
예제 #24
0
        protected override void RenderHeaderText(GridColumn <T> column)
        {
            if (IsSortingEnabled && column.Sortable)
            {
                string sortColumnName = GenerateSortColumnName(column);

                bool isSortedByThisColumn = GridModel.SortOptions.Column == sortColumnName;

                var sortOptions = new GridSortOptions
                {
                    Column = sortColumnName
                };

                if (isSortedByThisColumn)
                {
                    sortOptions.Direction = (GridModel.SortOptions.Direction == SortDirection.Ascending)
                                                ? SortDirection.Descending
                                                : SortDirection.Ascending;
                }
                else                 //default sort order
                {
                    sortOptions.Direction = column.InitialDirection ?? GridModel.SortOptions.Direction;
                }

                var routeValues = CreateRouteValuesForSortOptions(sortOptions, GridModel.SortPrefix);

                //Re-add existing querystring
                foreach (var key in Context.RequestContext.HttpContext.Request.QueryString.AllKeys.Where(key => key != null))
                {
                    if (!routeValues.ContainsKey(key))
                    {
                        routeValues[key] = Context.RequestContext.HttpContext.Request.QueryString[key];
                    }
                }

                var link = HtmlHelper.GenerateLink(Context.RequestContext, RouteTable.Routes, column.DisplayName, null, null, null, routeValues, null);
                RenderText(link);
            }
            else
            {
                base.RenderHeaderText(column);
            }
        }
예제 #25
0
        public static MvcHtmlString SortingOptions(this HtmlHelper helper, GridSortOptions sortOptions, object columnName, RouteValueDictionary getParams = null)
        {
            //copy existing parameters
            if (getParams == null)
                getParams = new RouteValueDictionary();
            var linkParams = new RouteValueDictionary();

            foreach (string key in helper.ViewContext.HttpContext.Request.QueryString)
            {
                getParams.Add(key, helper.ViewContext.HttpContext.Request.QueryString[key]);

                if (key != "Column" && key != "Direction")
                {
                    if (key == "Filter.ShowClosed")
                    {
                        if (helper.ViewContext.HttpContext.Request.QueryString[key].Contains("true"))
                            linkParams.Add(key, "true");
                        else linkParams.Add(key, "false");
                    }
                    else
                        linkParams.Add(key, helper.ViewContext.HttpContext.Request.QueryString[key]);
                }

            }

            if ((string)columnName == sortOptions.Column)
            {
                var direction = sortOptions.Direction;
                var newDirection = direction == SortDirection.Ascending ? SortDirection.Descending : SortDirection.Ascending;
                linkParams.Add("Direction", newDirection);
                linkParams.Add("Column", columnName.ToString());
            }
            else
            {
                linkParams.Add("Direction", SortDirection.Ascending);
                linkParams.Add("Column", columnName.ToString());
            }

            var link = helper.ActionLink((string)columnName, "List", "Session", linkParams, null);
            return link;
        }
예제 #26
0
        public ActionResult Index(int? page, GridSortOptions sortOptions)
        {
            if (sortOptions.Column == null)
                sortOptions = new GridSortOptions
                {
                    Column = "CreateDate",
                    Direction = SortDirection.Descending
                };

            page = page ?? 1;

            var log = _logger.GetAll();

            log = log.OrderBy(sortOptions.Column, sortOptions.Direction);

            var vm = new EventLogViewModel
            {
                Logs = log.AsPagination(page.Value, 10),
                SortOptions = sortOptions,
                Page = page.Value
            };

            return View(vm);
        }
예제 #27
0
 /// <summary>
 /// Secifies that the grid is currently being sorted by the specified column in a particular direction.
 /// </summary>
 public void Sort(GridSortOptions sortOptions)
 {
     _sortOptions = sortOptions;
 }
예제 #28
0
 public IGridWithOptions <T> Sort(GridSortOptions sortOptions, string prefix)
 {
     _gridModel.SortOptions = sortOptions;
     _gridModel.SortPrefix  = prefix;
     return(this);
 }
예제 #29
0
 public IGridWithOptions <T> Sort(GridSortOptions sortOptions)
 {
     _gridModel.SortOptions = sortOptions;
     return(this);
 }
예제 #30
0
        private SortableGridModel<Transfer> GetBalanceListModel(Func<IQueryable<Transfer>, IQueryable<Transfer>> query,
                                                               GridSortOptions sortOptions, int? page)
        {
            if (sortOptions == null)
                sortOptions = new GridSortOptions();

            if (sortOptions.Column == null)
            {
                sortOptions.Column = GridHelper.BalanceOrder.OrderDate;
                sortOptions.Direction = SortDirection.Descending;
            }

            var transferList = Repository.Transfer.Find(PagerHelper.PageSize, page ?? 1, query,
                                                        GridHelper.BalanceOrder.ColumnOrders[sortOptions.Column],
                                                        sortOptions.Direction == SortDirection.Ascending);

            var transferCount = Repository.Transfer.Count(query);

            return new SortableGridModel<Transfer>
            {
                Data = transferList,
                SortOptions = sortOptions,
                Pagination = PagerHelper.Pagination(page, transferCount)
            };
        }
예제 #31
0
 public IEnumerable<Employee> FindAll(int startRow, int pageSize, GridSortOptions sort)
 {
     return Session.QueryOver<Employee>().OrderBy(sort).Skip(startRow).Take(pageSize).Future<Employee>();
 }
예제 #32
0
 /// <summary>
 /// Specifies that the grid is currently being sorted by the specified column in a particular direction.
 /// This overload allows you to specify a prefix.
 /// </summary>
 public void Sort(GridSortOptions sortOptions, string prefix)
 {
     _sortOptions = sortOptions;
     _sortPrefix  = prefix;
 }
예제 #33
0
        public ActionResult Index(DealSearchViewModel search, GridSortOptions sort, int? page)
        {
            search.ControllerName = "SalesAssigner";
            search.ActionName = "Index";
            ViewBag.SearchModel = search;

            ViewBag.AssignToList = AssignToList;
            ViewBag.Sort = sort;

            IQueryable<Deal> deals = DealMgr.GetSalesAssignerDeals().Search(search);
            return View(SortAndPagingDeal(deals, sort, page));
        }
        public virtual ActionResult Index(int? page, GridSortOptions sort)
        {
            var authors = authorRepository.FindPage(page ?? 1, PageSize, sort.Column, sort.Direction == SortDirection.Ascending ? SortOrder.Ascending: SortOrder.Descending);

            var authorViewModels = Map<Page<Author>, IPagination<AuthorViewModel>>(authors);
            ViewData["sort"] = sort;

            return View(authorViewModels);
        }
예제 #35
0
        /// <summary>
        /// Creates model for the Manage.UserController.Index action
        /// </summary>
        /// <returns></returns>
        public static PaginationModel<UserModel> GetUserModelForUsers(GridSortOptions sort, int pageNumber = 1)
        {
            var column = (sort.Column == null) ? Constants.Sort_Column_LastName : sort.Column;
            var direction = sort.Direction;

            var model = CommonModelHelper.GetPaginatedModel<UserModel>(column, direction);
            model.GetPaginatedUsers(pageNumber);

            Guid userIdKey = ManageUserModelHelper.GetFormsAuthenticationTicket().IdKey();

            model.PageTitle = "Holy Angels System Users";
            model.UserIdKey = userIdKey;

            model.MetaDescription = "";
            model.MetaKeywords = "";
            model.MetaSubject = "";

            return model;
        }
        public virtual ActionResult List(int? page, GridSortOptions sortOptions, string number, int? regionId, int? correctionFacilityId, string terminalAddress)
        {
            // реализация поиска и фильтрации
            //http://www.codeproject.com/KB/aspnet/Grid_Paging_In_MVC3.aspx

            var dbFacilities = _selectionRepository.GetAllObjects().Where(terminal => terminal.IsDeleted == false);
            if (!UserHelper.Instance.IsAdministrator && !UserHelper.Instance.IsManager && !UserHelper.Instance.IsCallCenterUser) //простым смертным показывать только активные терминалы
                dbFacilities = dbFacilities.Where(terminal => terminal.IsActive == true);
            var facilities = dbFacilities.Select(dbTerminal => new TerminalListModel
                                                                   {
                                                                       Id = dbTerminal.Id,
                                                                       PhoneNumber = dbTerminal.PhoneNumber,
                                                                       IsPublic = dbTerminal.IsPublic,
                                                                       CorrectionFacilityId = dbTerminal.CorrectionFacilityId,
                                                                       CorrectionFacilityName = dbTerminal.CorrectionFacility.Name,
                                                                       InstallationAddress = dbTerminal.CorrectionFacility.Address,
                                                                       RegionId = dbTerminal.RegionId,
                                                                       IsActive = dbTerminal.IsActive
                                                                   });

            var pagedViewModel = new PagedViewModel<TerminalListModel>
            {
                ViewData = ViewData,
                Query = facilities,
                GridSortOptions = sortOptions,
                DefaultSortColumn = "PhoneNumber",
                Page = page,
                PageSize = 10
            }
            .AddFilter("number", number, t => t.PhoneNumber.Contains(number))
            .AddFilter("RegionId", regionId, t => t.RegionId == regionId, RegionController.GetDBRegionList(null), "Id", "Name")
            .AddFilter("CorrectionFacilityId", correctionFacilityId, t => t.CorrectionFacilityId == correctionFacilityId, CorrectionFacilityController.GetDbCorrectionFacilityList(-1, null), "Id", "Name")
            .AddFilter("terminalAddress", terminalAddress, t => t.InstallationAddress.ToLower().Contains(terminalAddress.ToLower()))
            .Setup();

            return View(pagedViewModel);
        }