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