public virtual ActionResult _Index(Func <IQueryable, IQueryable> filter) { var page = int.Parse(RequestManager.QueryStringDictionary["Page"].ToString()); var pageSize = int.Parse(RequestManager.QueryStringDictionary["PageSize"].ToString()); var orderBy = RequestManager.QueryStringDictionary["OrderBy"].ToString(); var viewModel = new DynamicIndexViewModel(DynamicEntitySearcher.DynamicEntityMetadata, RequestManager.QueryStringDictionary); var entityType = DynamicEntitySearcher.DynamicEntityMetadata.EntityMetadata.EntityType; var filters = viewModel.GetDynamicFilters().Select(x => (Func <IQueryable, IQueryable>)x.Filter).ToList(); if (filter != null) { filters.Add(filter); } var models = DynamicRepository.GetItems(entityType, filters, page, pageSize, orderBy, DynamicEntitySearcher.DynamicEntityMetadata.GetListIncludes().ToArray()); viewModel = new DynamicIndexViewModel(DynamicEntitySearcher.DynamicEntityMetadata, RequestManager.QueryStringDictionary, models); viewModel.RecordCount = DynamicRepository.GetRecordCount(DynamicEntitySearcher.DynamicEntityMetadata.EntityMetadata.EntityType, filters); var routeValueDictionary = viewModel.RouteValueDictionary.Clone(); routeValueDictionary.Remove("ReturnUrl"); viewModel.RouteValueDictionary["ReturnUrl"] = ReturnUrlCalculator.GetReturnUrl("Index", viewModel.DynamicEntityMetadata.EntityMetadata.TypeName, routeValueDictionary); return(ControllerManager.PartialView("_DynamicIndex", viewModel)); }
public DynamicControllerManager(HttpRequestBase request, ControllerManager controllerManager, IDynamicRepository dynamicRepository, UrlHelper urlHelper) { RequestManager = new RequestManager(request); DynamicEntitySearcher = new DynamicEntitySearcher(RequestManager); RequestManager.QueryStringDictionary = RequestManager.QueryStringDictionary.RouteValueDictionaryTypeCorrection(DynamicEntitySearcher.DynamicEntityMetadata); ControllerManager = controllerManager; DynamicRepository = dynamicRepository; UrlManager = new UrlManager(urlHelper); ReturnUrlCalculator = new ReturnUrlCalculator(UrlManager); }