public ActionResult ChooseFilterPOST(ChooseContentsViewModel model)
        {
            var routeValues = ControllerContext.RouteData.Values;

            if (GetContainableTypes().Any(ctd => string.Equals(ctd.Name, model.SelectedFilter, StringComparison.OrdinalIgnoreCase)))
            {
                routeValues["filterByContentType"] = model.SelectedFilter;
            }
            else
            {
                routeValues.Remove("filterByContentType");
            }
            if (model.SourceContainerId == 0)
            {
                routeValues.Remove("SourceContainerId");
            }
            else
            {
                routeValues["SourceContainerId"] = model.SourceContainerId;
            }
            routeValues["OrderBy"]           = model.OrderBy;
            routeValues["TargetContainerId"] = model.TargetContainerId;

            return(RedirectToAction("Choose", routeValues));
        }
        public ActionResult Choose(ChooseContentsViewModel model, PagerParameters pagerParameters)
        {
            var pager     = new Pager(_siteService.GetSiteSettings(), pagerParameters);
            var container = model.SourceContainerId == 0 ? null : _contentManager.GetLatest(model.SourceContainerId);

            if (container == null && model.SourceContainerId != 0)
            {
                return(HttpNotFound());
            }
            if (string.IsNullOrEmpty(model.FilterByContentType))
            {
                var targetContainer = _contentManager.Get <ContainerPart>(model.TargetContainerId);
                if (targetContainer != null)
                {
                    model.FilterByContentType = targetContainer.Record.ItemContentType;
                }
            }

            var query = GetListContentItemQuery(model.SourceContainerId, model.FilterByContentType, model.OrderBy);

            if (query == null)
            {
                return(HttpNotFound());
            }

            model.SelectedFilter = model.FilterByContentType;

            model.FilterOptions = GetContainableTypes()
                                  .Select(ctd => new KeyValuePair <string, string>(ctd.Name, ctd.DisplayName))
                                  .ToList().OrderBy(kvp => kvp.Key);

            var pagerShape         = Shape.Pager(pager).TotalItemCount(query.Count());
            var pageOfContentItems = query.Slice(pager.GetStartIndex(), pager.PageSize).ToList();

            var list = Shape.List();

            list.AddRange(pageOfContentItems.Select(ci => _contentManager.BuildDisplay(ci, "SummaryAdmin")));

            dynamic viewModel = Shape.ViewModel()
                                .ContentItems(list)
                                .Pager(pagerShape)
                                .SourceContainerId(model.SourceContainerId)
                                .TargetContainerId(model.TargetContainerId)
                                .SelectedFilter(model.SelectedFilter)
                                .FilterOptions(model.FilterOptions)
                                .OrderBy(model.OrderBy)
                                .Containers(_contentManager.Query <ContainerPart>(VersionOptions.Latest).List()
                                            .Select(part => part.ContentItem)
                                            .OrderBy(item => item.As <CommonPart>().VersionPublishedUtc));

            // Casting to avoid invalid (under medium trust) reflection over the protected View method and force a static invocation.
            return(View((object)viewModel));
        }