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("找不到指定的文章");
            }
        }