Fork me on GitHub

MvcPager 分页示例 — 文章内容分页

该示例演示如何用MvcPager实现长文章内容分页。

文章内容分页的实现原理是:在文章录入或编辑时在需要分页的地方插入分页符(一般富文本编辑器都有此功能),获取文章内容后通过正则表达式获取文章中所有分页符,每个分页符之间的内容即为一页,所有分页符总数即为总页数。

吴起婚嫁习俗

来源:吴起热线   作者:Webdiyer    发布日期:2011/3/5 0:00:00

媵马

就是新娘骑乘的马。要给媵马戴红脑缨和串铃,鞴好鞍韂,驮上新人的铺盖衣物等。男方娶人的未起程前,新郎先要骑一下媵马,叫“压媵马”.意思是看马是否合适,鞍子备好了没有。媵马要用未阉的公马、公驴充当现在大多不用牲口,而是用汽车,但新郎还要在车里坐一坐,以示压媵马的程序。

媵衣

即新娘穿的结婚衣服。全部由新郎家准备。贺喜那天由男方娶人的全部带到女方,经清点后交给女方,新娘在离开娘家之前要将平时穿的衣服全部换掉,穿上结婚新衣(媵衣)迎娶。

照妖镜

新娘迎娶的过程中身上佩带的镜子。旧时一般用铜镜。给镜子穿一条布带绑在新娘的腰里。新娘上马时镜子在新娘的背后,走过一半路后要换在前胸,意即辟邪。

彩子布

即红盖头。多用大花红布(丈二长)中间绑一朵大花,新娘顶在头上,两头披肩下垂。一为遮羞避尘,二为吉利美观,增加喜庆气氛。现在坐车互有顶红头纱的。

迎亲人

贺喜的那一天,男方要先到女方娶亲。娶亲人由介绍人、代事人、娶人婆姨(有配偶的妇女,多由新郎的嫂子、婶娘充当)、拉马人、驮箱子的人(专门运输女方陪嫁箱子的人)及一班吹鼓手组成,娶亲人必须是单数(加上要娶的新娘就成了双数)。

View:

@model PagedArticle
<h2 class="center">@Model.Title</h2>
<div class="center">来源:@Model.Source   作者:@Model.Author    发布日期:@Model.PubDate</div>
<div class="content">@Html.Raw(Model.Content)</div>
<div class="text-center">
    @Html.Pager(Model).Options(o => o.SetContainerTagName("ul").SetCssClass("pagination").SetCurrentPagerItemTemplate("<li class=\"active\"><a href=\"#\">{0}</a></li>").SetDisabledPagerItemTemplate("<li class=\"disabled\"><a>{0}</a></li>").SetPagerItemTemplate("<li>{0}</li>").SetPageIndexParameterName("id").SetRouteName("MvcPager_Default"))
</div>
    

Model:

    [NotMapped]
    public class PagedArticle:Article,IPagedList<string>
    {
        private readonly IEnumerable<string> _pagedContent;
        private PagedArticle(){}
        public PagedArticle(Article art, int pageIndex)
        {
            //获取文章内容中的分页符的正则表达式,分页符通过ckeditor等富文本编辑器的“插入分页符”功能插入到文章中,html代码为“<div style="page-break-after: always"> <span style="display: none;">&nbsp;</span></div>”
            var re = new Regex("<div\\s+style =\"page-break-after:\\s*always;?\">[\\r\\n]*.*?</div>",
                               RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Compiled |
                               RegexOptions.IgnorePatternWhitespace);
            _pagedContent = re.Split(art.Content);
            if(pageIndex>_pagedContent.Count()||pageIndex<1) throw new invalidoperationexception("页索引超出界限");
                                                             id=art.ID;
                                                             title=art.Title;
                                                             author=art.Author;
                                                             content=_pagedContent.ToArray()[pageIndex - 1];
                                                             pubdate=art.PubDate;
                                                             source=art.Source;
                                                             currentpageindex=pageIndex;
                                                             pagesize=1;
                                                             totalitemcount=_pagedContent.Count();
                                                             }
                                                             public ienumerator<string> GetEnumerator()
        {
            return _pagedContent.GetEnumerator();
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }

        public int CurrentPageIndex { get; set; }
        public int PageSize { get { return 1; } set{} }
        public int TotalItemCount { get; set; }
    }

Controller:

        
        public ActionResult ContentPaging(int id=1)
        {
            using (var db = new DataContext())
            {
                var art = db.Articles.SingleOrDefault(a => a.ID == 25); //获取演示用的长文章
                if (art != null)
                {
                    return View(new PagedArticle(art, id));
                }
                return new HttpNotFoundResult("找不到指定的文章");
            }
        }