public ActionResult Index(int listId, int pageIndex)
        {
            var list = listService.GetById(listId);

            if (list == null)
            {
                return(new HttpNotFoundResult());
            }

            int totals;
            var items = listItemService.GetListItems(listId, list.Sorting, pageIndex, list.PageSize, out totals);

            var sb = new StringBuilder();

            if (!string.IsNullOrEmpty(list.CssClass))
            {
                sb.AppendFormat("<div class=\"{0}\">", list.CssClass);
            }

            if (items.Count > 0 && !string.IsNullOrEmpty(list.SummaryTemplate))
            {
                var fields = listFieldService.GetFields(listId);
                TemplateHelper.BuildContent(list, fields, items, list.SummaryTemplate, sb, Url);
            }

            TemplateHelper.BuildPagination(sb, Url, RouteData.Values, totals, pageIndex, list.PageSize);

            if (!string.IsNullOrEmpty(list.CssClass))
            {
                sb.Append("</div>");
            }

            return(new ControlContentResult(sb.ToString())
            {
                Title = list.Name
            });
        }
        public ActionResult Category(int listId, string pathInfo)
        {
            var    segments  = pathInfo.Split(new[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
            var    pageIndex = 1;
            string slug;

            if (segments.Length > 1)
            {
                if (int.TryParse(segments[segments.Length - 1], out pageIndex))
                {
                    slug = string.Join("/", segments, 0, segments.Length - 1);
                }
                else
                {
                    slug      = string.Join("/", segments);
                    pageIndex = 1;
                }
            }
            else
            {
                slug = segments[0];
            }

            int categoryId;

            if (listCategoryPathConstraint.Match(listId, slug, out categoryId))
            {
                var category = listCategoryService.GetById(categoryId);
                if (category == null)
                {
                    return(new HttpNotFoundResult());
                }

                var list = listService.GetById(category.ListId);
                if (list == null)
                {
                    return(new HttpNotFoundResult());
                }

                int totals;
                var items = listItemService.GetListItemsByCategoryId(listId, categoryId, list.Sorting, pageIndex, list.PageSize, out totals);

                var sb = new StringBuilder();

                if (!string.IsNullOrEmpty(list.CssClass))
                {
                    sb.AppendFormat("<div class=\"{0}\">", list.CssClass);
                }

                if (items.Count > 0 && !string.IsNullOrEmpty(list.SummaryTemplate))
                {
                    var fields = listFieldService.GetFields(list.Id);
                    TemplateHelper.BuildContent(list, fields, items, list.SummaryTemplate, sb, Url);
                }

                if (totals > 0)
                {
                    TemplateHelper.BuildPagination(sb, Url, RouteData.Values, totals, pageIndex, list.PageSize);
                }

                if (!string.IsNullOrEmpty(list.CssClass))
                {
                    sb.Append("</div>");
                }

                return(new ControlContentResult(sb.ToString())
                {
                    Title = list.Name + " - " + category.Name
                });
            }

            return(Item(listId, slug));
        }